Vb.net Visual Basic.NET-更改一个列表框项的颜色

Vb.net Visual Basic.NET-更改一个列表框项的颜色,vb.net,text,colors,listbox,Vb.net,Text,Colors,Listbox,我正在用VB.NET做一个小程序。我有一个列表框和一个按钮。我想能够按下按钮,并有选择的列表框项目改变它的前景色为绿色。我已经尝试了很多方法,从覆盖draw方法到使用listView(listBox对于我正在做的事情来说要好得多,请不要建议我使用listView,我已经尝试过了。) 起初我以为这会很简单,但事实恰恰相反,我很沮丧这么简单的任务竟然如此困难。我不想使用任何第三方控件,因为我必须完全重新编写我的应用程序 我尝试过很多不同的选择,一点都不好笑。请问,谁能提供一个更简单的解决方案 -Q您

我正在用VB.NET做一个小程序。我有一个列表框和一个按钮。我想能够按下按钮,并有选择的列表框项目改变它的前景色为绿色。我已经尝试了很多方法,从覆盖draw方法到使用listView(listBox对于我正在做的事情来说要好得多,请不要建议我使用listView,我已经尝试过了。)

起初我以为这会很简单,但事实恰恰相反,我很沮丧这么简单的任务竟然如此困难。我不想使用任何第三方控件,因为我必须完全重新编写我的应用程序

我尝试过很多不同的选择,一点都不好笑。请问,谁能提供一个更简单的解决方案


-Q

您需要处理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

在绘制字符串后绘制焦点矩形。建议使用TextRenderer.DrawText。使用此精确代码,我得到以下错误:'-1'的InvalidArgument=值对'index'无效。参数名称:index@Quark:此代码仅供参考,请放置适当的控制语句以避免此类问题。我还没有测试这段代码。我已经修改它以适应我的控制,它告诉我索引无效。我尝试过类似的代码,但得到了相同的错误。