gpt4 book ai didi

c# - 在 C# 中,如何防止列表框中的所有项目更改为上次设置的颜色?

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:55 25 4
gpt4 key购买 nike

我已经研究了如何为每一行更改颜色,这是我使用公共(public)变量 itemColor 的代码,它是一个 Brush

...

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();
}

...

我已将列表框 DrawMode 设置为 OwnerDrawFixed,并且所有项目都变为红色。任何人都可以看到我可能愚蠢的错误吗?

最佳答案

listBox1_DrawItem 每次需要重新绘制控件时都会被调用,例如在项目添加/删除或选择更改时。您可以通过向表单添加第二个按钮并执行以下操作来看到这一点:

private void button2_Click(object sender, EventArgs e)
{
itemColor = Brushes.Blue;
}

单击第二个按钮后,下次重绘 ListBox 时,所有项目的文本都将变为蓝色。


很可能有更好的方法来做到这一点,但是您可以处理这个问题的一种方法是创建一个类来代表您具有 TextBrush 字段的项目并添加用这些填充您的列表框。然后在 DrawItem 处理程序上,将 Items[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();
}

关于c# - 在 C# 中,如何防止列表框中的所有项目更改为上次设置的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35211489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com