0

它通常可以正常工作,但是由于我只想在右键单击鼠标右键时才为项目着色,所以它不起作用,因为当我显示/打开 listBox 时,它首先进入 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 现在是第一次。

编辑:

我还需要两件事。

  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 回答