[問題] 關於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