【问题标题】:CreateParams() property shows default icon on inherited formCreateParams() 属性在继承的表单上显示默认图标
【发布时间】:2013-11-07 12:19:15
【问题描述】:

任务

我管理一个基于主 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”变量中设置一些可以删除图标的东西?

示例

我创建了一个快速应用程序来模拟我的部分问题。我无法复制闪烁,因为这取决于应用程序很大。然而,在这个测试项目中,我复制了一个继承了上面代码的“主”表单的表单。然后,这不允许删除图标(即使在设计器中)。 dropbox.com/s/mg9fyfoshakc69z/TestProject.zip

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

【问题讨论】:

  • ImActive 标志设置在哪里?
  • 在 Form_Shown() 上设置为 True

标签: .net vb.net inheritance flicker createparams


【解决方案1】:

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

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

显示表单后设置为 false 似乎效果最好。

【讨论】:

  • 我在新构造函数的 InitializeComponent() 方法之前将 imActive 标志设置为 true,然后在此方法之后再次将其设置为 false,它似乎可以工作。干杯!
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多