【问题标题】:Visual Basic .NET - Change color of one listBox itemVisual Basic .NET - 更改一个列表框项的颜色
【发布时间】:2011-07-11 13:38:49
【问题描述】:

我正在用 VB.NET 编写一个小程序。我有一个列表框和一个按钮。我希望能够按下按钮并让选定的列表框项目将其前颜色更改为绿色。我已经尝试了很多方法,从覆盖draw方法到使用listView(listBox对于我正在做的事情要好得多,请不要推荐我使用listView,我已经尝试过了。 )

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

我尝试了很多不同的选项,这甚至都不好笑。请问,谁能提供一个更简单的解决方案?

-Q

【问题讨论】:

    标签: vb.net text colors listbox


    【解决方案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
    

    【讨论】:

    • 在绘制字符串后 绘制焦点矩形。推荐使用 TextRenderer.DrawText。
    • 使用这个确切的代码,我得到这个错误:InvalidArgument='-1' 的值对'index' 无效。参数名称:索引
    • @Quark:此代码仅供参考,请放置适当的控制语句以避免此类问题。我没有测试过这段代码。
    • 我已经修改它以适应我的控制,它告诉我索引无效。我试过类似的代码,我得到了同样的错误。
    猜你喜欢
    • 2015-09-07
    • 2011-10-17
    • 2014-09-16
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2012-11-15
    • 1970-01-01
    相关资源
    最近更新 更多