.Net WinForms应用程序:更改Form.ShowInTaskbar值时表格闪烁

时间:2016-04-04 04:01:42

标签: .net vb.net winforms

请考虑以下代码:

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属性的情况下处理最小化/恢复内容?

(我发现一些话题正在讨论这个但我找不到任何有用的解决方案。)

注意: 我不想隐藏主要表单或使其可点击

1 个答案:

答案 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