2

タスク

メイン 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 に影響を与えます。

4

1 に答える 1

1

デモ アプリケーションを実行した後、私が確認できる唯一の違いは、ImActive フラグです。

テスト プロジェクト セットに追加された同様のフラグを変更すると、さまざまな結果が得られました。目的の結果が得られるまで、これが設定されている場所を変更することをお勧めします。

フォームが表示された後に false に設定すると、最適に動作するように見えました。

于 2013-10-31T10:41:43.157 に答える