Search code examples
c#winformslistboxwidthlistboxitem

Winforms DotNet ListBox items to word wrap if content string width is bigger than ListBox width?


Ehm, umm, this means some lines should be two-lined in size. My boss think this is more simple solution, than limit displayed text to fit width and don't like horizontal scroll bar >_<


Solution

  • 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);
    }