请考虑以下代码:
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
属性的情况下处理最小化/恢复内容?
(我发现一些话题正在讨论这个但我找不到任何有用的解决方案。)
注意: 我不想隐藏主要表单或使其可点击。
答案 0 :(得分:0)
在表单中写下以下代码 -
Private originalExStyle As Integer = -1
Private enableFormLevelDoubleBuffering As Boolean = True
Protected Overrides ReadOnly Property CreateParams() As CreateParams
Get
If originalExStyle = -1 Then
originalExStyle = MyBase.CreateParams.ExStyle
End If
Dim cp As CreateParams = MyBase.CreateParams
If enableFormLevelDoubleBuffering Then
cp.ExStyle = cp.ExStyle Or &H2000000
Else
' WS_EX_COMPOSITED
cp.ExStyle = originalExStyle
End If
Return cp
End Get
End Property
请在此处查找更多详情 - http://www.angryhacker.com/blog/archive/2010/07/21/how-to-get-rid-of-flicker-on-windows-forms-applications.aspx