[問題] 關於ListBox的文字本體與背景變色問題

看板C_Sharp作者 (玉鼎)時間9年前 (2015/02/27 17:44), 編輯推噓3(306)
留言9則, 3人參與, 最新討論串1/2 (看更多)
目前我大概有先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

02/27 22:23, , 1F
動態增加控制項
02/27 22:23, 1F

02/27 23:42, , 2F
listbox的item不是只能放string的 自己定義個class就好
02/27 23:42, 2F

02/27 23:44, , 3F
顯示文字,前景色,背景色 所有你想自己畫的等等
02/27 23:44, 3F

03/03 15:47, , 4F
我大概懂你的問題 所以你就不應該用switch
03/03 15:47, 4F

03/03 15:53, , 5F
你要讓使用者自己新增文字選擇顏色 他們選好
03/03 15:53, 5F

03/03 15:53, , 6F
你需要的參數都有了阿 跟swich根本沒關係了
03/03 15:53, 6F

03/03 15:53, , 7F
就寫一個void來負責新增使用者新增的item
03/03 15:53, 7F

03/03 16:04, , 8F
喔對了 他確實會全部重繪((我沒用過不知道XD
03/03 16:04, 8F

03/03 16:05, , 9F
所以你可能需要用Dictionary來存 存item跟顏色
03/03 16:05, 9F
文章代碼(AID): #1Ky3nalp (C_Sharp)
文章代碼(AID): #1Ky3nalp (C_Sharp)