2011-03-09 107 views
0

我正在VB.NET中製作一個小程序。我有一個列表框和一個按鈕。我希望能夠按下按鈕並讓選定的列表框項目將其前景顏色更改爲綠色。我已經嘗試了很多方法來做到這一點,從重寫draw方法到使用listView(listBox對我所做的更好,請不要建議我使用listView,我已經嘗試過了。 )Visual Basic .NET - 更改一個列表框項目的顏色

起初我以爲這會很簡單,但事實恰恰相反,我非常沮喪,這樣一個簡單的任務應該如此困難。我不想使用任何第三方控件,因爲我必須完全重寫我的應用程序。

我已經嘗試了很多不同的選項,它甚至不好笑。請,任何人都可以提供更簡單的解決方案?

-Q

回答

1

您需要處理DRAWITEM事件和DrawMode = OwnerDrawFixed財產。

Dim buttonPressed As Boolean 
Private Sub ListBox1_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem 
    e.DrawBackground() 

    If ListBox1.SelectedIndices.Contains(e.Index) And buttonPressed Then 
     e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, Brushes.Green, e.Bounds.X, e.Bounds.Y) 

    Else 
     e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, Brushes.Black, e.Bounds.X, e.Bounds.Y) 
    End If 
    If e.Index = ListBox1.Items.Count - 1 Then 
     buttonPressed = False 
    End If 
    e.DrawFocusRectangle() 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    buttonPressed = True 
    ListBox1.Refresh() 
End Sub 
+1

繪製字符串後繪製焦點矩形*。建議使用TextRenderer.DrawText。 – 2011-03-09 03:19:11

+0

使用這個確切的代碼,我得到這個錯誤:InvalidArgument ='-1'的值是'索引'無效。 參數名稱:索引 – Quark 2011-03-09 23:02:45

+0

@Quark:本代碼僅供參考,請妥善保管控制語句以避免此類問題。我沒有測試過這個代碼。 – adatapost 2011-03-10 01:09:13