1

一度に複数のフォームが表示される .net winforms アプリケーションがあります。1 つのフォームはルーチン的に無効になっています (this.enabled = false;)。この間、フォームはカスタム モーダル ダイアログを作成して表示します。ダイアログが閉じられると、無効になっている元のフォームはフォーカスを失います。フォームを無効に設定するコードを削除しました。それをテストしたところ、フォームはダイアログから戻った後もフォーカスを維持していました。無効なフォームでモーダル カスタム ダイアログを開き、ダイアログが閉じられたときに他のフォームの上にフォーカスしたままにする方法はありますか?

4

1 に答える 1

1

いいえ。Windows マネージャーは、ダイアログが閉じるときにフォーカスを与える別のウィンドウを選択する必要があります。アプリで有効なウィンドウが残っていない場合、別のアプリケーションのウィンドウを選択する必要があります。アプリのウィンドウをバックグラウンドにプッシュする可能性があります。

考えられる回避策は、ダイアログを閉じる前にウィンドウをすばやく有効にし、後で再度無効にすることです。このような:

using (var dlg = new Form2()) {
    dlg.FormClosing += new FormClosingEventHandler((s, ea) => {
        if (!ea.Cancel) this.Enabled = true; 
    });
    if (dlg.ShowDialog() == DialogResult.OK) {
        // etc...
    }
    this.Enabled = false;
}

ただし、これは一般的にユーザビリティの問題であることに注意してください。ユーザーが別のアプリケーションに切り替えると、再びあなたのアプリケーションに切り替えることはできません。

于 2012-11-07T20:57:39.173 に答える