2013-07-12 13 views

risposta

30
lst.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; 
lst.MeasureItem += lst_MeasureItem; 
lst.DrawItem += lst_DrawItem; 

private void lst_MeasureItem(object sender, MeasureItemEventArgs e) 
{ 
    e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height; 
} 

private void lst_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    e.DrawFocusRectangle(); 
    e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds); 
} 
+1

Sembra un po 'complicato ma funziona come un fascino –

+0

Love it. Una cosa minore però. Quando registro una classe personalizzata, il DisplayMember viene cancellato e non riesco a sembrare Qualsiasi suggerimento? –

+0

@BillSambrone - Mi spiace, ma non uso il database e non incontro mai lo stesso problema e non so come risolvere – Kosmos

0

Helpful link

Partenza questa risposta. Sostituisce il modello della listbox con un blocco di testo che racchiude il testo. Spero sia utile Per risolvere il tuo problema penso che dovresti aggiungere: ScrollViewer.HorizontalScrollBarVisibility = "Disabled". Trovato here

+0

Grazie, ma io uso i moduli di vittoria :( – Kosmos

0
private void lst_MeasureItem(object sender, MeasureItemEventArgs e) 
{ 
    e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height; 
} 

private void lst_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    e.DrawFocusRectangle(); 
    e.Graphics.DrawString(lst.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds); 
} 

Per ottenere il membro display destro di presentarsi quando l'associazione di dati, sostituire

lst.Items[e.Index].ToString() 

con una versione fusa della proprietà. Quindi, se la vostra fonte di legame è oggetto classe auto sarebbe sembrare

((Car)lst.Items[e.Index]).YourDisplayProperty 

Poi le funzioni di cui sopra possono opportunamente misurare la corda e disegnarlo. :)

0

Per rendere corretto il collegamento, assicurarsi di aggiungere il controllo "lst.Items.Count> 0" alla funzione lst_MeasureItem. Ecco il mio esempio:

if (lst.Items.Count > 0) 
{ 
    e.ItemHeight = (int)e.Graphics.MeasureString(lst.Items[e.Index].ToString(), lst.Font, lst.Width).Height; 
} 

Tutto il resto sembra funzionare bene dopo.

Problemi correlati