【发布时间】: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