目前我大概有先google一下,大多网络作法是使用Drawitem的方式下去做,这个
方式的确可以变色,先贴我google到的程式码。
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add("红色");
listBox1.Items.Add("黄色");
listBox1.Items.Add("蓝色");
listBox1.DrawMode = DrawMode.OwnerDrawFixed; // 属性里设置
}
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Color vColor = e.ForeColor;
switch (e.Index)
{
case 0: vColor = Color.Red; break;
case 1: vColor = Color.Yellow; break;
case 2: vColor = Color.Blue; break;
}
e.Graphics.FillRectangle(new SolidBrush(vColor), e.Bounds);
e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(), e.Font,
new SolidBrush(e.ForeColor), e.Bounds);
e.DrawFocusRectangle();
}
这个方法是预先在Drawitem里指定好第n个item的颜色
但是假设如果我的程式设计item是自己由textbox输入新增到listbox里,而且连颜色
都是自己设定下去,例如透过color.Dialog来选择(知道颜色码还要转换一次)
此时我发现我好像卡关了,不知该怎么下手.....
因为两个部分,今天自自己新增文字、自己选择文字颜色到listbox内,那么我就
无法预先知道我会设定什么颜色(菜鸟的我目前颜色只有想到用全域变量来解决颜
色问题),但最大问题在于,使用者会输入几个item到listbox,我无法知道,因
此在Drawitem里的switch case就不知道该怎么怎么设定数量
另外的小问题,Drawitem是不是只要有item新增进去时,其实他是整个ListBox都重绘?
是的话,如果现有50个item,我要在新增一个item进去的话,是不是我还得先记下来
旧有50个item的颜色,然后重绘时候在一个一个指定回去?
请大家指点一下大略方向