在C#中,如何防止列表框中的所有项目更改为上次设置的颜色?
我研究了如何更改每行的颜色,下面是我使用公共变量itemColor的代码,它是一个笔刷在C#中,如何防止列表框中的所有项目更改为上次设置的颜色?,c#,winforms,visual-studio,listbox,C#,Winforms,Visual Studio,Listbox,我研究了如何更改每行的颜色,下面是我使用公共变量itemColor的代码,它是一个笔刷 ... public Brush itemColor; private void button2_Click(object sender, EventArgs e) { itemColor = Brushes.Purple; listBox1.Items.Add("Purple"); itemColor = Brushes.Green; listBox1.Items.Add
...
public Brush itemColor;
private void button2_Click(object sender, EventArgs e)
{
itemColor = Brushes.Purple;
listBox1.Items.Add("Purple");
itemColor = Brushes.Green;
listBox1.Items.Add("Green");
itemColor = Brushes.Red;
listBox1.Items.Add("Red");
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), listBox1.Font,
itemColor, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
...
我已经将listbox DrawMode设置为OwnerDrawFixed,所有项目都变为红色。有人能看到我的可能愚蠢的错误吗?
listBox1\u DrawItem
每次需要重新绘制控件时都会被调用,例如在项目添加/删除或选择更改时。通过在表单中添加第二个按钮并执行以下操作,您可以看到这一点:
private void button2_Click(object sender, EventArgs e)
{
itemColor = Brushes.Blue;
}
单击第二个按钮后,下次重新绘制列表框时,所有项目的文本都将为蓝色
很可能有更好的方法可以做到这一点,但您可以处理这一点的一种方法是创建一个类,用文本和画笔字段来表示您的项目,然后添加这些内容并用它们填充您的列表框。然后在DrawItem处理程序上,将项[e.Index]
强制转换到类中,并引用文本和颜色字段。大概是这样的:
class Entry
{
public string Text;
public Brush Color;
}
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add(new Entry { Text = "Purple", Color = Brushes.Purple });
listBox1.Items.Add(new Entry { Text = "Green", Color = Brushes.Green });
listBox1.Items.Add(new Entry { Text = "Red", Color = Brushes.Red });
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
var currentItem = listBox1.Items[e.Index] as Entry;
e.DrawBackground();
e.Graphics.DrawString(currentItem.Text, listBox1.Font, currentItem.Color,
e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
我刚刚尝试了另一个按钮,后来添加了一条绿线,在前三条线变为红色后,这四条线全部变为绿色。@TimWayne ha,ha,我刚刚用一些非常类似的东西更新了我的答案,以便您在触发DrawItem
事件处理程序时使用。我还包括了一个简单的(粗糙的)解决方案,我测试了它并在这个例子中起作用。不管怎样,我更喜欢它在代码方面,而且它还起作用!谢谢