0

私は CheckedListBox を使用していますが、個々の項目を異なる色/フォントまたはその他の強調表示方法で強調表示する必要があります。

ただし、個々の項目ではなく、コントロール全体の視覚的プロパティのみを変更できます。

追加情報: このようなリストを 2 つ (簡単に選択するにはチェックボックスが必要なため) と、包含/除外タイプの機能用に 2 つのボタン (>> <<) を使用しています。上記のような私の要件も満たされるように実装するための他のより良い方法はありますか?

4

1 に答える 1

0

私は 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;
}
于 2011-11-20T14:30:46.553 に答える