winform listbox 使用DrawMode使用OwnerDrawVarialbe或OwnerDrawFixed無水平滾動條


因為需要使用DrawMode自行DrawItem,所以需要將DrawMode設置為OwnerDrawVarialbe或OwnerDrawFixed模式,代碼如下:

 private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index >= 0)
    {
        e.DrawBackground();
        Brush mybsh = Brushes.Black;
        if (listBox4.Items[e.Index].ToString().IndexOf("[ERROR]") != -1)
        {
            mybsh = Brushes.Red;
        }
        // 焦點框
        e.DrawFocusRectangle();
        //文本 
        //e.Graphics.DrawString(listBox4.Items[e.Index].ToString(), e.Font, mybsh, e.Bounds, StringFormat.GenericDefault);
        e.Graphics.DrawString(listBox4.Items[e.Index].ToString(), e.Font, mybsh, e.Bounds, null);
    }
}

  

並對listbox增加事件:DrawItem事件設置為listBox_DrawItem

但是這樣就無法使用默認方式出現水平滾動條,那么需要對listbox增加事件listbox_MeasureItem,代碼如下:

private void listBox_MeasureItem(object sender, MeasureItemEventArgs e)
{
    String lvsDisp = listBox.Items[e.Index].ToString();
    SizeF lvSize = e.Graphics.MeasureString(lvsDisp, listBox.Font);
    if (listBox.HorizontalExtent < lvSize.Width)
    {
        listBox.HorizontalExtent = (int)lvSize.Width + 10;
    }
    e.ItemHeight = (int)lvSize.Height;
    e.ItemWidth = (int)lvSize.Width;
}

  

這樣就可以自動出現水平滾動條了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM