2

私は C# は初めてですが、長い間 VB6 でプログラミングしてきました。エラーなしで実行される非常に単純なプロジェクトがあります。ただし、Windows 自体に関係する問題が 1 つあります。(他のプログラムから) ウィンドウを開き、そのウィンドウがアプリケーションに重なっている場合...その「他のウィンドウ」を閉じた瞬間、アプリケーションのウィンドウは「他のウィンドウ」によって重なった部分を再描画しません。

Windows Vista で Bubbles スクリーンセーバーが起動するたびに、同じことが起こります。マウスを揺らしてスクリーン セーバーをキャンセルすると、どうなるでしょうか? 窓全体に気泡が散らばっています。VB では、単純な "Window.Refresh" がありました。ただし、C# では、これは機能しません。私はフォーラムを精査しましたが、「スレッドを更新する」という言及があるようです。この時点でちょっと混乱しています。なぜ物事は単純にならないのですか??

4

2 に答える 2

2

Form.Invalidateを呼び出して、フォームのクライアント領域を無効にすることができます。これにより、ペイント メッセージが受信され、自身が再描画されます。

これは、VB6 の Refresh メソッドに似ています。

ただし、これは自動的に行われます。ただし、アプリケーションが UI スレッドで何らかの処理を行っている場合、作業が完了するまでメッセージを処理できません。この場合は、BackgroundWorker (またはその他のメソッド) を使用して作業をバックグラウンド スレッドにプッシュすることを検討する必要があります。

于 2011-02-07T17:43:27.800 に答える
0

C# でフォームを再描画するために必要な特別なことはありません (ウィンドウを上部に戻すと、フォームは正常に再描画されるはずです)。

サードパーティによるコントロールはありますか? this.Refresh()Control.Refresh() は C# に存在します。フォーム自体 (通常はフォームの分離コード)、または子を持つ任意のコントロール (パネルなど)から呼び出すことができる必要があります。

于 2011-02-07T17:44:43.740 に答える