作者sdwufei (玉鼎)
看板C_Sharp
标题[问题] 关於ListBox的文字本体与背景变色问题
时间Fri Feb 27 17:44:01 2015
目前我大概有先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的颜色,然後重绘时候在一个一个指定回去?
请大家指点一下大略方向
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 124.218.10.149
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1425030244.A.BF3.html
1F:→ fukinhot: 动态增加控制项 02/27 22:23
2F:→ soup514: listbox的item不是只能放string的 自己定义个class就好 02/27 23:42
3F:→ soup514: 显示文字,前景色,背景色 所有你想自己画的等等 02/27 23:44
4F:推 TameFoxx: 我大概懂你的问题 所以你就不应该用switch 03/03 15:47
5F:推 TameFoxx: 你要让使用者自己新增文字选择颜色 他们选好 03/03 15:53
6F:→ TameFoxx: 你需要的参数都有了阿 跟swich根本没关系了 03/03 15:53
7F:→ TameFoxx: 就写一个void来负责新增使用者新增的item 03/03 15:53
8F:推 TameFoxx: 喔对了 他确实会全部重绘((我没用过不知道XD 03/03 16:04
9F:→ TameFoxx: 所以你可能需要用Dictionary来存 存item跟颜色 03/03 16:05