CreateParams()属性在继承的表单上显示默认图标

时间:2013-10-28 16:07:56

标签: .net vb.net inheritance flicker createparams

任务

我管理一个基于主MDI表单的大型应用程序。所有其他形式都是此MDI表格的子项或子项的对话框。由于它是一个很大的应用程序,打开和关闭子窗口会导致整个应用程序出现一些闪烁。我的任务是删除这种闪烁的效果,因为它看起来不整洁。我的主要想法是让所有子窗口继承一个“主”窗体,它将处理所有窗体必须包含的所有常用功能。从这里开始,我可以解决这一中心点的任何问题,这将使管理应用程序变得更加容易。

问题

为了解决这个问题,我在网上找到了解决问题的解决方案。但是,不久前我发现这也在“Master”表单中引入了一个新问题,如果任何表单的“ShowIcon”属性为false,则“Master”表单会强制它成为默认的visual studio表单图标。我把它缩小到我在网上找到的防闪烁解决方案(下图)。

Private imActive As Boolean = False
Private defaultEX As Integer = -1
Protected Overrides ReadOnly Property CreateParams() As CreateParams
    Get
        Dim cp As CreateParams = MyBase.CreateParams
        If defaultEX = -1 Then
            defaultEX = cp.ExStyle
        End If
        If DesignMode = False and imActive = False Then
            cp.ExStyle = cp.ExStyle Or &H2000000
        Else
            cp.ExStyle = defaultEX
        End If
        Return cp
    End Get
End Property

如果我发表评论,它可以正常工作,但闪烁是无法忍受的。

问题

我想知道当前解决方案是否有替代方案,或者我是否可以在“cp”变量中设置可删除图标的内容?

示例

我创建了一个模拟部分问题的快速应用程序。我无法复制闪烁,因为这是由于应用程序很大。但是,在这个测试项目中,我复制了一个表单,该表单继承了上面代码的“Master”表单。这样就不允许删除图标(即使在设计师中也是如此)。 dropbox.com/s/mg9fyfoshakc69z/TestProject.zip

对于这个复制,我不需要包含MDI父级,但是我有一个继承的表单(MasterForm)和一个继承它的表单(Form1)。 MasterForm具有覆盖CreateParams属性的代码。这会影响Form1,当窗口的ShowIcon切换设置为false时,它会显示默认的VB窗口图标而不是删除它。

1 个答案:

答案 0 :(得分:1)

运行演示应用程序后,我能看到的唯一区别是ImActive标志。

修改添加到测试项目集的类似标志对我来说有各种各样的结果,我建议更改设置的位置,直到得到所需的结果。

在显示表单后,设置为false似乎效果最佳。