关于 ListBox 的 DrawItem 问题,不知是 BUG 还是我操作的方式不对?

Triumph 2018-03-01 11:06:27
我用的是 Visual Studio Community 2017 版,目前更新到了 11.5.7 ,OS 为 Win10。

新建一个 VB 的【Windows 窗体应用】,拖入一个 ListBox,将 DrawMode 改为 OwnerDrawFixed ,在 Items 中随便输入些内容,然后在代码中写:
	Private Sub ListBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ListBox1.DrawItem

Dim bg As Brush = Brushes.White
Dim fColor As Brush = Brushes.Black

If e.State And DrawItemState.Selected = DrawItemState.Selected Then
bg = Brushes.Black
fColor = Brushes.White
End If

e.Graphics.FillRectangle(bg, e.Bounds)
e.Graphics.DrawString(ListBox1.Items(e.Index), Me.Font, fColor, e.Bounds)

End Sub


代码很简单,就是画 Item 的背景和字符,根据选择状态换颜色。

运行后绘制正常,选择不同的项时颜色切换都正常:



然后在窗体中拖入一个按钮,其它什么都不变,直接运行,诡异的事情发生了:

全部绘制为选中状态的样子!!!


为了验证是哪里出的问题,我先换到另一台 VS 和 OS 版本都和上面相同的电脑上,结果也一样;然后换成新建一个 C# 的【Windows 窗体应用】,操作步骤相同,除了代码是 C# 格式,其它的都一样,运行后都正常,没有出现问题。看来只是在 VB 下才有这样的结果。

不知道是 BUG 还是我操作的方式不对?哪位遇到过这种情况?

...全文
498 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Triumph 2018-03-03
  • 打赏
  • 举报
回复
zj_zwl :谢谢!是我脑子短路了,忘了等号比 AND 优先,应该加上括号的。不过诡异的是为嘛加按钮之前反倒正常?
zj_zwl 2018-03-03
  • 打赏
  • 举报
回复
改下

    If e.State And DrawItemState.Selected  Then
        bg = Brushes.Black
        fColor = Brushes.White
    End If


16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧