[问题] 关于ListBox的文字本体与背景变色问题

楼主: sdwufei (玉鼎)   2015-02-27 17:44:01
目前我大概有先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的颜色,然后重绘时候在一个一个指定回去?
请大家指点一下大略方向
作者: fukinhot (抱歉粗口我怕热)   2015-02-27 22:23:00
动态增加控件
作者: soup514   2015-02-27 23:42:00
listbox的item不是只能放string的 自己定义个class就好显示文字,前景色,背景色 所有你想自己画的等等
作者: TameFoxx (foxx)   2015-03-03 15:47:00
我大概懂你的问题 所以你就不应该用switch你要让使用者自己新增文字选择颜色 他们选好你需要的参数都有了阿 跟swich根本没关系了就写一个void来负责新增使用者新增的item喔对了 他确实会全部重绘((我没用过不知道XD所以你可能需要用Dictionary来存 存item跟颜色

Links booklink

Contact Us: admin [ a t ] ucptt.com