它一般都在工作,但是因为我只想在右键单击鼠标右键时才对其进行着色,因此当我显示/打开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现在是第一次出现。
编辑:
我还需要两件事。
答案 0 :(得分:0)
为列表中的每个项目调用OnDrawItem。而且你把每个项目着色为红色。您需要检查是否需要绘制的项目是所选项目(如果我没记错的那样是e.Selected
),如果是,则将其涂成红色,否则为其他颜色添加颜色..也许{{1 }}
答案 1 :(得分:0)
试试这个:
if(((ListBox)sender).SelectedIndex == e.index)
{
....
}