Какой элемент управления типа CheckedListBox (в devexpress) позволяет изменять цвет для отдельных элементов? - PullRequest
0 голосов
/ 20 ноября 2011

Я использую CheckedListBox, но мне нужно выделять отдельные элементы разными цветами / шрифтами или другим методом выделения.

Но это позволяет изменять визуальные свойства только для всего элемента управления, а не для отдельных элементов.

Дополнительная информация: Я использую 2 таких списка (потому что для облегчения выбора нужны флажки) и 2 кнопки (>> <<) для включения / исключения функций типа.Есть ли какой-нибудь другой лучший способ реализовать такое, чтобы мои требования, описанные выше, также выполнялись? </p>

1 Ответ

0 голосов
/ 20 ноября 2011

Я только баловался с элементами управления DevExpress, но я думаю, что вы должны подписаться на событие DrawItem и установить для свойства e.Handled значение true.

как-то так ( элементы CheckedListBox с разными цветами ):

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