我有一个使用VB.NET Winforms / .Net Framework 4.5.2的项目,当前正在使用ListViewBox来显示某些信息。但是,当窗口被禁用时(例如,我有一个子窗口为某些事情禁用了父窗口),它的工作效果很好,ListViewBox背景色为灰色。这是了解我的意思的示例:
如您所见,当禁用窗口时,底部图像出现。我想防止发生这种浅灰色,但我不知道如何解决。我听说过一些事情,例如将背景颜色设置为实际颜色(在这种情况下为黑色),虽然确实可以用作hack,但是添加的所有项目仍然会覆盖该颜色,因此它不起作用。
答案 0 :(得分:1)
您可以在控件(一个自定义控件,即Public Class CustomListView Inherits ListView)上使用WNDPROC覆盖该事件,以防止该窗口启用/禁用。然后,您还必须覆盖OnEnableChanged,以便可以更改自己的颜色。似乎当您重新启用并返回到原始/默认颜色时,它也会刷新自定义颜色,因此可以在此处进行操作。如果您要求单独启用/禁用此功能,则可以比此功能更高级(可能是只读的),但是由于禁用整个表单时,您仍然无法与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
由于我们将前景色恢复为正常,因此刷新了我认为的列表视图,导致所有其他颜色也恢复为正常,如上图所示。
这可能不是原始的,但我希望它可以帮助某人朝正确的方向开始。