VB.NET Winforms/.Net Framework 4.5.2 ListViewBox 禁用背景颜色
VB.NET Winforms/.Net Framework 4.5.2 ListViewBox Disable Background Color
我有一个使用 VB.NET Winforms/.Net Framework 4.5.2 的项目,我目前正在使用 ListViewBox 来显示某些信息。它工作得很好,但是,当 window 被禁用时(即我有一个 child window 禁用某些东西的 parent window)ListViewBox 背景颜色是灰色的。这是看我的意思的例子:
如您所见,底部图像是在禁用 window 时出现的。我想防止那种浅灰色的发生,但我不知道如何解决这个问题。我听说过一些方法,例如将背景颜色设置为实际颜色(在本例中为黑色),这确实可以作为 hack,但是添加的任何项目都会覆盖它,所以它不起作用。
您可以在控件(自定义控件,即 Public Class CustomListView 继承 ListView)上使用 WNDPROC 覆盖事件,以防止 window 获取 enable/disable.然后您还必须覆盖 OnEnableChanged 以便您可以更改自己的颜色。似乎当您重新启用并返回您的 original/default 颜色时,它也会刷新自定义颜色,所以它在这里起作用。如果您需要单独 enabled/disabled ,您可能会比这更高级(可能是只读的),但是因为当您禁用整个表单时,您仍然无法与 ListView 交互,这对我来说是一个不错的解决方案额外编码。
Protected Overrides Sub OnEnabledChanged(e As System.EventArgs)
MyBase.OnEnabledChanged(e)
If Me.Enabled Then
Me.ForeColor = Color.White
Me.BackColor = Color.Black
Else
Me.ForeColor = Color.FromArgb(255, 200, 200, 200)
Me.BackColor = Color.FromArgb(255, 35, 35, 35)
End If
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case &HA 'WM_ENABLE
' Prevent the message from reaching the control,
' so the colors don't get changed by the default procedure.
Exit Sub ' <-- suppress WM_ENABLE message
Case Else
MyBase.WndProc(m)
Exit Select
End Select
End Sub
这导致:
并且因为我们将前景色改回正常,它刷新了我假设的列表视图,导致所有其他颜色恢复正常,如上图在我的问题中显示的那样。
它可能不是原始的,但我希望它能帮助人们朝着正确的方向开始。
我有一个使用 VB.NET Winforms/.Net Framework 4.5.2 的项目,我目前正在使用 ListViewBox 来显示某些信息。它工作得很好,但是,当 window 被禁用时(即我有一个 child window 禁用某些东西的 parent window)ListViewBox 背景颜色是灰色的。这是看我的意思的例子:
如您所见,底部图像是在禁用 window 时出现的。我想防止那种浅灰色的发生,但我不知道如何解决这个问题。我听说过一些方法,例如将背景颜色设置为实际颜色(在本例中为黑色),这确实可以作为 hack,但是添加的任何项目都会覆盖它,所以它不起作用。
您可以在控件(自定义控件,即 Public Class CustomListView 继承 ListView)上使用 WNDPROC 覆盖事件,以防止 window 获取 enable/disable.然后您还必须覆盖 OnEnableChanged 以便您可以更改自己的颜色。似乎当您重新启用并返回您的 original/default 颜色时,它也会刷新自定义颜色,所以它在这里起作用。如果您需要单独 enabled/disabled ,您可能会比这更高级(可能是只读的),但是因为当您禁用整个表单时,您仍然无法与 ListView 交互,这对我来说是一个不错的解决方案额外编码。
Protected Overrides Sub OnEnabledChanged(e As System.EventArgs)
MyBase.OnEnabledChanged(e)
If Me.Enabled Then
Me.ForeColor = Color.White
Me.BackColor = Color.Black
Else
Me.ForeColor = Color.FromArgb(255, 200, 200, 200)
Me.BackColor = Color.FromArgb(255, 35, 35, 35)
End If
End Sub
Protected Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case &HA 'WM_ENABLE
' Prevent the message from reaching the control,
' so the colors don't get changed by the default procedure.
Exit Sub ' <-- suppress WM_ENABLE message
Case Else
MyBase.WndProc(m)
Exit Select
End Select
End Sub
这导致:
并且因为我们将前景色改回正常,它刷新了我假设的列表视图,导致所有其他颜色恢复正常,如上图在我的问题中显示的那样。
它可能不是原始的,但我希望它能帮助人们朝着正确的方向开始。