2011-03-09 105 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