【发布时间】:2016-04-04 04:01:42
【问题描述】:
考虑以下代码:
Me.ShowInTaskbar = Not ShowInTaskbar
每次我调用这行代码时,表单都会闪烁一小段时间(可能取决于表单上有多少控件)。
好的,我为什么要首先运行它?
基本上,我有一个主窗体,我用它来显示一些对话框窗体,我希望能够通过单击任务栏来最小化/恢复这两个窗体(主和对话框),所以我正在使用这个代码:
Dim dialogForm As New frmDialog
Me.ShowInTaskbar = False
dialogForm.ShowDialog(Me)
Me.ShowInTaskbar = True
而在对话框中:
Private Sub frmDialog_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
frmMain.Visible = Me.WindowState <> FormWindowState.Minimized
End Sub
现在,一切正常除了,每次我启用/禁用 ShowInTaskbar 属性时表单都会闪烁(这对我来说非常重要,因为它会影响我拥有的每个对话框表单)。
有什么办法可以防止这种情况发生吗? 或有没有其他方法可以在不触及ShowInTaskbar 属性的情况下处理最小化/恢复事物?
(我找到了一些讨论这个的话题,但我找不到任何有用的解决方案)。
注意: 我不想隐藏主窗体或使其可点击。
【问题讨论】:
-
不相关但为什么要检查 Resize 事件?您有一个特定的窗口状态更改
-
一个特定的事件?哪个是?!
-
当窗口状态改变时,Windows 将向您的表单发送 WM_SYSCOMMAND,覆盖 WndPrc 并使用 wParam 为 SC_MINIMIZE、SC_MAXIMIZE 和 SC_RESTORE 检查该命令。
-
您正在创建一个未使用的 frmDialog 实例 (dialogForm),对吗?也许您正在看到它的两个实例的结果。
-
@user34660 不,这只是这个例子中的一个错误(在原始代码中不是这种情况),我已经对其进行了编辑.. 感谢您的注意:)