我需要替换CheckedListBox
中项目的颜色,但“alternatingColors”不是CheckedListBox
的属性。
如何让项目的颜色交替出现?
答案 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);
}
}
默认情况下,它会在白色和绿色之间切换。在设计时或运行时在“属性”面板中进行调整。
答案 1 :(得分:-2)
我认为这甚至不可能。您可能需要考虑使用不同的控件来满足您的需求。 DataGridView可能能够更好地为您服务。