【问题标题】:Alternate background color of rows in a CheckedListBox?CheckedListBox中行的替代背景颜色?
【发布时间】:2015-06-23 18:13:12
【问题描述】:

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

如何让物品的颜色交替变化?

【问题讨论】:

  • 对每个项目应用交替的 CSS 类。
  • 如果您详细说明您正在使用的堆栈,将会很有帮助。这适用于 WPF、Winforms、MVC 等吗?
  • @GrantWinney 啊。在想 CheckBoxList 啊!
  • 似乎DataGridView 有两列CheckBoxColumn 和TextBoxColumn,而DataGridVIew.AlternatingRowDefaultCellStyle.BackColor = Color.Green 将是更简单的方法

标签: c# winforms checkedlistbox


【解决方案1】:

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

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

【讨论】:

  • 这太棒了。所以一旦我创建了一个类并添加了这个表单,我如何将 MyCheckedListBox 放到我的 Windows 表单上?我不能只是从工具箱中拖动它
【解决方案2】:

我认为这是不可能的。您可能需要考虑使用不同的控件来满足您的需要。 DataGridView 可能更适合您。

【讨论】:

  • 是的,那会是涂料
猜你喜欢
  • 2012-02-28
  • 2014-03-23
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2017-10-29
  • 1970-01-01
  • 2019-06-30
相关资源
最近更新 更多