如何为列表框中的选定项目着色?单击鼠标右键时仅为所选项目文本着色

时间:2012-12-28 16:02:05

标签: c#

它一般都在工作,但是因为我只想在右键单击鼠标右键时才对其进行着色,因此当我显示/打开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. 要启用多个chocies,所以如果我点击鼠标右键,它将保留已经是红色的其他项目,这样我就可以选择多个项目为红色。

2 个答案:

答案 0 :(得分:0)

为列表中的每个项目调用OnDrawItem。而且你把每个项目着色为红色。您需要检查是否需要绘制的项目是所选项目(如果我没记错的那样是e.Selected),如果是,则将其涂成红色,否则为其他颜色添加颜色..也许{{1 }}

答案 1 :(得分:0)

试试这个:

if(((ListBox)sender).SelectedIndex == e.index)
{
....
}