0

私のアプリケーションは別のスレッドのサーバーと通信することがありますが、このときはフォームをロックする必要があります(つまり、ユーザーはイベントを発生させることができませんClickKeyDown。今回は、クリックやマウスホバーなどのマウスイベントをブロックする円が読み込まれたウェイトオーバーレイが表示されます。

ただし、問題は、ユーザーがキーを押すことでKeyDownイベントを発生させることができ、Tabキーでボタンに移動した後にEnterキーを押すことでマウスクリックを行うこともできることです。

私はそれForm.Enabled = true;がトリックを行うことができることを知っています、しかしそれからフォームは非常に醜いように見えます。bool inaction;また、イベントハンドラーでこの変数を作成して確認できることも知っていますが、もっと良い方法があると思います。

短いフォーム:.Enabled = TrueのないフォームからClickやKeyDownなどのGUIイベントをブロックするにはどうすればよいですか?

どんな助けでも大歓迎です。

編集:これをオーバーレイコントロールに追加して解決しました:

protected override bool ProcessKeyMessage(ref Message m)
{
    return true;
}
protected override bool ProcessTabKey(bool forward)
{
    return true;
}
4

1 に答える 1

1

KeyPreviewフォームのプロパティをfalseに設定できます。

falseの場合KeyPreview、イベントがフォーカスのあるコントロールに渡される前に、フォームはキーイベントを受信しません。また、キーと相互作用しない未使用のコントロールにフォーカスを変更すると、フォームまたはキーイベントを待機しているコントロールはイベントを受信しません。

于 2013-02-05T12:43:59.153 に答える