CheckedListBox中行的备用背景颜色?

时间:2015-06-23 18:13:12

标签: c# winforms checkedlistbox

我需要替换CheckedListBox中项目的颜色,但“alternatingColors”不是CheckedListBox的属性。

如何让项目的颜色交替出现?

2 个答案:

答案 0 :(得分:2)

默认情况下,OnDrawItem事件无法访问,但如果您基于CheckedListBox派生新控件,则可以覆盖基本事件。

public class MyCheckedListBox : CheckedListBox
{
    private SolidBrush primaryColor = new SolidBrush(Color.White);
    private SolidBrush alternateColor = new SolidBrush(Color.LightGreen);

    [Browsable(true)]
    public Color PrimaryColor
    {
        get { return primaryColor.Color; }
        set { primaryColor.Color = value; }
    }

    [Browsable(true)]
    public Color AlternateColor
    {
        get { return alternateColor.Color; }
        set { alternateColor.Color = value; }
    }

    protected override void OnDrawItem(DrawItemEventArgs e)
    {
        base.OnDrawItem(e);

        if (Items.Count <= 0)
            return;

        var contentRect = e.Bounds;
        contentRect.X = 16;
        e.Graphics.FillRectangle(e.Index%2 == 0 ? primaryColor : alternateColor, contentRect);
        e.Graphics.DrawString(Convert.ToString(Items[e.Index]), e.Font, Brushes.Black, contentRect);
    }
}

默认情况下,它会在白色和绿色之间切换。在设计时或运行时在“属性”面板中进行调整。

enter image description here

答案 1 :(得分:-2)

我认为这甚至不可能。您可能需要考虑使用不同的控件来满足您的需求。 DataGridView可能能够更好地为您服务。