2011-01-12 10 views
29

Ho un Panel che sto creando a livello di codice; inoltre sto aggiungendo diversi componenti ad esso.Come Autosize l'altezza di un etichetta, ma non la larghezza

Uno di questi elementi è Label che conterrà contenuti generati dagli utenti.

Non so quanto è alto l'etichetta dovrebbe essere, ma ha una larghezza fissa.

Come posso impostare l'altezza in modo da visualizzare tutto il testo, senza cambiare la larghezza?

risposta

60

Basta utilizzare la proprietà AutoSize, impostare di nuovo a True.

Impostare la proprietà MaximumSize su, ad esempio, (60, 0) in modo che non possa crescere orizzontalmente, solo verticalmente.

+0

+1. Molto più semplice del mio suggerimento. – Brian

+0

Selezionata come risposta a causa della semplicità, la risposta di Brian è anche perfettamente buona, ma questa è più facile da capire e mantenere. – Malfist

+0

Cosa succede se ho bisogno di una larghezza del fluido? – Robin

5

Uso Graphics.MeasureString:

public SizeF MeasureString(
    string text, 
    Font font, 
    int width 
) 

Il parametro larghezza specifica il valore massimo della componente larghezza della struttura SizeF restituito (larghezza). Se il parametro width è inferiore alla larghezza effettiva della stringa , il componente Larghezza restituita viene troncato a un valore che rappresenta il numero massimo di caratteri che si adatta alla larghezza specificata. per accogliere l'intera stringa, il componente di altezza restituita viene regolata ad un valore che permette di visualizzare la stringa con pellicola carattere.

In altre parole, questa funzione può calcolare l'altezza della stringa in base alla larghezza.

+1

penso che si dovrebbe essere in grado di usa 'Graphics.FromHwnd (myLabel.Handle)' per ottenere l'oggetto 'Graphics'. – Brian

+0

+1 Bella risposta. Qualche ragione per cui non hai incluso il bit Graphics.FromHwnd (myLabel.Handle) nella risposta? –

+1

@Confrad: No. – Brian

0

Se si dispone di un marchio e si desidera avere il controllo del la misura in verticale, è possibile effettuare le seguenti operazioni:

MyLabel.MaximumSize = new Size(MyLabel.Width, 0) 
MyLabel.Height = MyLabel.PreferredHeight 
MyLabel.MaximumSize = new Size(0, 0) 

Questo è utile per esempio se si dispone di un'etichetta in un contenitore che può essere ridimensionata . In tal caso, puoi impostare la proprietà Anchor in modo che l'etichetta venga ridimensionata orizzontalmente ma non verticalmente e, nell'evento di ridimensionamento, puoi adattare l'altezza utilizzando il metodo sopra riportato.

Per evitare il montaggio verticale deve essere interpretato come un nuovo evento di ridimensionamento, è possibile utilizzare un valore booleano:

bool _inVerticalFit = false; 

E nel caso di ridimensionamento:

if (_inVerticalFit) return; 
_inVerticalFit = true; 
MyLabel.MaximumSize = new Size(MyLabel.Width, 0) 
MyLabel.Height = MyLabel.PreferredHeight 
MyLabel.MaximumSize = new Size(0, 0) 
_inVerticalFit = false; 
Problemi correlati