2010-10-21 14 views
5

In questo momento ho chiarito che potrebbe trattarsi di una domanda duplicata da: Right-aligned labels in WinForms Ma non le risposte mi hanno soddisfatto.WinForms: etichetta con allineamento a destra autosize

Il problema è molto semplice:

Ho il diritto un'etichetta allineata con autosize settato a true. Il comportamento previsto è che quando il testo viene aumentato le coordinate giuste rimangono invariate. Ma non è quello che succede. La coordinata sinistra è quella che rimane invariata.

La mia app è un po 'piccola, quindi non voglio iniziare a mettere i controlli in pannelli e così .. Quindi ho provato tutte le soluzioni che riguardavano SOLO le proprietà dell'etichetta. L'unico che ha funzionato è impostare autosize su false e sovradimensionarlo. (Soluzione accettata della domanda Nº1692383). Ma è davvero brutto !!! Mi piacerebbe davvero evitarlo.

Qualsiasi altra soluzione possibile ??

Grazie in anticipo!

+0

vedere la mia risposta modificata. La versione originale non ha funzionato correttamente quando il modulo è stato ridimensionato. –

+0

Tahnks @adrift !!! Non avevo realizzato che il primo non funzionasse. – Diego

risposta

7

Una soluzione potrebbe essere quella di catturare il margine destro della griffe nel costruttore del form, e nel caso in etichetta SizeChanged, reimpostare la posizione sulla base del margine iniziale a destra, dell'etichetta corrente Width e l'etichetta del padre corrente Width.

Ciò presuppone anche che l'etichetta sia ancorata a destra per gestire il ridimensionamento del modulo.

private readonly int _rightMargin; 

public Form1() 
{ 
    InitializeComponent(); 

    _rightMargin = label1.Parent.Width - label1.Right; 
} 

private void label1_SizeChanged(object sender, EventArgs e) 
{ 
    label1.Location = new Point(label1.Parent.Width - _rightMargin - label1.Width, label1.Top); 
} 
Problemi correlati