2014-12-18 60 views
0

如何更改下拉組合列表框中某些項目的顏色?我有一個程序從文件中加載列表中的項目,並且我希望某些項目由開關(來自文件中其他字段的數據)確定爲不同的顏色。該列表將被排序。Visual Basic 2010 - 更改列表框中的文本顏色

例如 - 一個20人的列表被加載,其中3人的東西會改變他們的名字爲不同的顏色。這怎麼可以在代碼中完成?

ForeColor屬性不起作用...它更改列表中的所有項目。

+1

什麼是'下拉組合列表box'? – OneFineDay

+0

你想要一個「所有者繪製」的控件。對於ListBox,請參閱[ListBox.DrawMode](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.listbox.drawmode(v = vs.110).aspx)。對於ComboBox,請參見[ComboBox.DrawMode](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.combobox.drawmode(v = vs.110).aspx)。 –

+0

http://stackoverflow.com/questions/15936006/change-color-of-specific-item-on-listbox-that-c​​ontains-a-specific-string-on-draw – Dano

回答

0

您可以所有者繪製的項目,然後指定商品的顏色,例如:

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     ComboBox1.DrawMode = DrawMode.OwnerDrawFixed 

     Dim i As New Item() 
     i.ItemColor = Color.Red 
     i.Text = "Hello" 

     ComboBox1.Items.Add(i) 

     i = New Item() 
     i.ItemColor = Color.Blue 
     i.Text = "World" 

     ComboBox1.Items.Add(i) 

    End Sub 


    Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem 

     If e.Index < 0 Then Return 

     Dim i As Item 
     i = TryCast(ComboBox1.Items(e.Index), Item) 

     If i IsNot Nothing Then 
      e.Graphics.DrawString(i.Text, e.Font, New SolidBrush(i.ItemColor), e.Bounds) 
     End If 
    End Sub 
End Class 

Public Class Item 
    Public Text As String 
    Public ItemColor As Color 
End Class 
+0

嗨...謝謝你的答案,我相信它會起作用。我需要幾天的時間才能適應我的計劃。我是一位自學成才的程序員愛好者。但是,從我所看到的...這是否意味着我需要將相同的過程應用於列表中的其他項目,我不需要使用不同的顏色?或者我可以正常添加這些項目嗎?看起來「DrawItem」子程序是由「items.add」函數調用的,因此需要將正常的項目應用到「item」類中,但是使用黑色(或前景色)作爲類。 –

+0

只要控件繪製項目,就會調用DrawItems。當您通過單擊下拉按鈕或使用鍵盤刪除列表時會發生這種情況。您可以簡單地爲所有不需要格式化的項目使用組合框的前景色。根據您的項目佈局,您可以找出正確設置此值的位置。 –