4

WinFormsフォーム内にTextBoxコントロール(正確にはDevExpressTextEdit)があるので、フォーカスがテキストボックス内にある場合、ユーザーがEnterキーを押したときにフォームを閉じたくありません。

と思った

filterTextBox.KeyDown += 
    (sender, e) => 
        e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;

十分ですが、無視されているようで、フォームは閉じたままです。

私の質問は:

フォームが開いたままになるように、1行のテキストボックスコントロール内の入力を意図的に無視するにはどうすればよいですか?

解決

Botz3000のソリューションは私のために働きました:

filterTextBox.PreviewKeyDown += 
    (sender, e) => 
        e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
filterTextBox.KeyDown += 
    (sender, e) => 
        e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
4

3 に答える 3

6

更新PreviewKeyDownイベントの処理も試してください。MSDNのドキュメントでは、備考のセクションでそれをかなりよく説明しています。trueに設定IsInputKeyすると、デフォルトの動作をオーバーライドして、TextBoxがキーを処理できるようにすることができます。PreviewKeyDownでこれを実行してから、ですでに行ったようにキーを処理する必要がありますKeyDown

編集:機能していません:以前に提案されEnterMoveNextControlたプロパティ

于 2012-06-04T09:25:24.643 に答える
2

皆さんの解決策に基づいて、通常のRichTextBox取り扱いPreviewKeyDownで十分です。

private void rtbNote_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter;
}
于 2013-11-07T08:10:23.290 に答える
1

自分で試さずKeyDownに、テキストボックスのにブール値を設定し、フォームの終了時にそのブール値を確認し、設定されている場合はフォームの終了をキャンセルします(ブール値をリセットします)。

于 2012-06-04T09:26:13.147 に答える