タスク
メイン MDI フォームに基づく大きなアプリケーションを管理しています。他のすべてのフォームは、この MDI フォームまたは子のダイアログの子です。大きなアプリケーションであるため、子ウィンドウを開いたり閉じたりすると、アプリケーション全体でちらつきが発生します。このちらつき効果が乱雑に見えるので、私はこのちらつき効果を取り除くことを任されました。私の主な考えは、すべての子ウィンドウが、すべてのフォームに含まれる必要のあるすべての一般的な機能を処理する「マスター」フォームを継承するようにすることでした。ここから、この 1 つの中心点で問題を修正できるため、アプリケーションの管理がはるかに簡単になります。
問題
ちらつきを解決するために、問題を解決するソリューションを Web で見つけました。ただし、少し前に、これにより「マスター」フォームにも新しい問題が発生することがわかりました。フォームの「ShowIcon」プロパティがfalseの場合、「マスター」フォームはそれをデフォルトのビジュアルスタジオフォームアイコンに強制します。これを、Web で見つけたちらつき防止ソリューション (以下) に絞り込みました。
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 プロパティをオーバーライドするコードがあります。これは、ウィンドウの ShowIcon のトグルが false に設定されている場合に、デフォルトの VB ウィンドウ アイコンを削除する代わりに表示するように、Form1 に影響を与えます。