それは一般的に機能していますが、マウスの右ボタンを右クリックしたときにのみアイテムに色を付けたいので、リストボックスを表示/開くときに最初にDrawItemイベントに行くので機能しません:
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
listBox1.SelectedIndex = listBox1.IndexFromPoint(e.X, e.Y);
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
isColor = true;
}
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (isColor == true)
{
if (e.Index < 0) return;
//if the item state is selected them change the back color
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
e = new DrawItemEventArgs(e.Graphics,
e.Font,
e.Bounds,
e.Index,
e.State ^ DrawItemState.Selected,
e.ForeColor,
Color.Red);//Choose the color
// Draw the background of the ListBox control for each item.
e.DrawBackground();
// Draw the current item text
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
// If the ListBox has focus, draw a focus rectangle around the selected item.
e.DrawFocusRectangle();
}
}
私はフラグ isColor を使用しましたが、最初に DrawItem イベントに行くため、このコードはうまく機能していません。isColor は今初めて flase なので。
編集:
さらに2つ必要です。
- アイテム上でマウスの左ボタンをクリックすると、以前と同じように通常の青色でマークされます。
- マウスの右ボタンをクリックすると、アイテムは赤色になります。
- 複数の選択を有効にするには、マウスを右クリックすると、すでに赤になっている他のアイテムが保持されるため、多くのアイテムを選択して赤にすることができます。