哪个CheckedListBox类型控件(在devexpress中)允许单个项目的颜色更改?

时间:2011-11-20 11:57:07

标签: winforms devexpress checkedlistbox

我正在使用CheckedListBox,但我需要突出显示具有不同颜色/字体或其他突出显示方法的单个项目。

但它允许仅更改整个控件的视觉属性,而不是单个项目。

其他信息: 我使用2个这样的列表(因为需要复选框以便于选择)和2个按钮(>><<<)用于包含/排除类型功能。还有其他更好的方法来实现这样的方式,即我的上述要求也得到满足吗?

1 个答案:

答案 0 :(得分:0)

我只涉及DevExpress控件,但我认为您必须订阅DrawItem事件并将e.Handled属性设置为true。

像这样(CheckedListBox items with different colors):

private void checkedListBoxControl1_DrawItem(object sender, ListBoxDrawItemEventArgs e) {
  CheckedListBoxControl clbControl = sender as CheckedListBoxControl;
  ButtonState state = ButtonState.Normal;
  if (clbControl.GetItemChecked(e.Index))
    state = ButtonState.Checked;

  ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(e.Bounds.X, e.Bounds.Y, 15, 15), state);

  string itemText = e.Item.ToString();
  Rectangle textRect = new Rectangle(e.Bounds.X + 15, e.Bounds.Y, e.Bounds.Width - 15, e.Bounds.Height);
  if ((e.State & DrawItemState.Selected) != 0) {
    e.Graphics.FillRectangle(SystemBrushes.Highlight, textRect);
  }

  if (state== ButtonState.Checked)
    e.Graphics.DrawString(itemText, e.Appearance.Font, new SolidBrush(Color.Red), textRect, e.Appearance.GetStringFormat());
  else
    e.Graphics.DrawString(itemText, e.Appearance.Font, new SolidBrush(Color.Black), textRect, e.Appearance.GetStringFormat());

  e.Handled = true;
}