看板 C_Sharp 關於我們 聯絡資訊
目前我大概有先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://www.ptt.cc/bbs/C_Sharp/M.1425030244.A.BF3.html
fukinhot: 動態增加控制項 02/27 22:23
soup514: listbox的item不是只能放string的 自己定義個class就好 02/27 23:42
soup514: 顯示文字,前景色,背景色 所有你想自己畫的等等 02/27 23:44
TameFoxx: 我大概懂你的問題 所以你就不應該用switch 03/03 15:47
TameFoxx: 你要讓使用者自己新增文字選擇顏色 他們選好 03/03 15:53
TameFoxx: 你需要的參數都有了阿 跟swich根本沒關係了 03/03 15:53
TameFoxx: 就寫一個void來負責新增使用者新增的item 03/03 15:53
TameFoxx: 喔對了 他確實會全部重繪((我沒用過不知道XD 03/03 16:04
TameFoxx: 所以你可能需要用Dictionary來存 存item跟顏色 03/03 16:05