【问题标题】:Change the "selected" color of a ListBox in Winforms?在 Winforms 中更改 ListBox 的“选定”颜色?
【发布时间】:2012-12-02 23:11:18
【问题描述】:

当您在 Windows 窗体中的 listbox 中选择某些内容时,如何更改难看的蓝色?我能找到的所有解决方案要么包括重新创建整个控件,要么只使用 WPF。有没有办法在 WinForms 中做到这一点?

【问题讨论】:

    标签: c# winforms listbox


    【解决方案1】:

    将listBox的DrawMode设置为OwnerDrawFixed并订阅DrawItem事件:

    private void listBox_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
        Graphics g = e.Graphics;
        Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? 
                      Brushes.Red : new SolidBrush(e.BackColor);
        g.FillRectangle(brush, e.Bounds);
        e.Graphics.DrawString(listBox.Items[e.Index].ToString(), e.Font, 
                 new SolidBrush(e.ForeColor), e.Bounds, StringFormat.GenericDefault); 
        e.DrawFocusRectangle();            
    }
    

    您可以通过检查事件参数的e.State 属性来确定绘图项的状态。如果状态为Selected,则使用您喜欢的任何画笔(例如红色)来填充项目行。

    【讨论】:

    • +1。有趣的方法。出于某种原因,我看到这些项目略微向预期矩形的底部移位。会不会是我的自定义 dpi 设置为 125%?
    • 我和 Neolisk 有同样的问题。 +1 岁
    • 您可以通过将“listBox”更改为 ((ListBox)sender) 将其用于多个列表框。即该方法的发送者是需要绘制项的列表框。
    【解决方案2】:

    在编辑之前..(他问的是 ListView 而不是 ListBox)

    对象列表视图:

    ListView1.UseCustomSelectionColors = true;
    ListView1.HighlightBackgroundColor = Color.Red; // for example :)
    ListView1.UnfocusedHighlightBackgroundColor = Color.Red;
    

    列表视图:

    myitem.BackColor = Color.Red;
    

    【讨论】:

    • 请注意,设置 ListView 项目的 BackColor 并不能解决 OP 询问的选择颜色问题。
    • 真的很抱歉,我遇到的是listbox,不是listview
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2023-03-07
    • 2018-04-12
    • 2011-05-22
    相关资源
    最近更新 更多