0

それは一般的に機能していますが、マウスの右ボタンを右クリックしたときにのみアイテムに色を付けたいので、リストボックスを表示/開くときに最初に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つ必要です。

  1. アイテム上でマウスの左ボタンをクリックすると、以前と同じように通常の青色でマークされます。
  2. マウスの右ボタンをクリックすると、アイテムは赤色になります。
  3. 複数の選択を有効にするには、マウスを右クリックすると、すでに赤になっている他のアイテムが保持されるため、多くのアイテムを選択して赤にすることができます。
4

2 に答える 2

0

OnDrawItemは、リスト内のすべてのアイテムに対して呼び出されます。そして、あなたはすべてのアイテムを赤く着色しています。描画する必要のあるアイテムが選択されたアイテムであるかどうかを確認する必要があります(私が正しく覚えている場合はそうなりますe.Selected)。それが赤であるかどうか、そうでない場合は別の色である可能性があります。SystemColors.Window

于 2012-12-28T16:06:23.710 に答える
0

これを試して:

if(((ListBox)sender).SelectedIndex == e.index)
{
....
}
于 2012-12-28T16:10:27.173 に答える