Ehm, umm, questo significa che alcune linee devono essere a due facce. Il mio capo pensa che questo è la soluzione più semplice, al limite di visualizzazione del testo per adattare la larghezza e non mi piace barra di scorrimento orizzontale> _ <Winform Elementi ListBox DotNet a capo a capo se la larghezza della stringa del contenuto è maggiore della larghezza ListBox?
risposta
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);
}
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
Grazie, ma io uso i moduli di vittoria :( – Kosmos
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. :)
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.
Sembra un po 'complicato ma funziona come un fascino –
Love it. Una cosa minore però. Quando registro una classe personalizzata, il DisplayMember viene cancellato e non riesco a sembrare Qualsiasi suggerimento? –
@BillSambrone - Mi spiace, ma non uso il database e non incontro mai lo stesso problema e non so come risolvere – Kosmos