1

KeyPreview を true に設定したフォーム myForm があります。

アイデアは、どのテキストボックス (または他のコントロール) がフォーカスされていても、CTRL-Enter をキャプチャしてフォームの送信ボタンを起動したいということです。

だから私はこの方法を設定しました:

private void myForm_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.Enter)
    {
        btnCommit_Click(sender, new EventArgs()); 
    }
}

それはまさにそれが言うことをします。問題は、エンター キー ストロークがフォーカスされたテキスト ボックスでも発生するため、テキスト ボックスの単語の途中またはカーソルの位置に改行が入ることです。MSDNのドキュメントによると:

このプロパティが true に設定されている場合、フォームはすべての KeyPress、KeyDown、および KeyUp イベントを受け取ります。フォームのイベント ハンドラーがキーストロークの処理を完了すると、キーストロークはフォーカスのあるコントロールに割り当てられます。

これは残念ながら真実ではありません。コードをステップ実行して、myForm_KeyUp コードが実行される前にテキスト ボックスに新しい改行が実際に表示されることを確認しました。

私は両方を追加しようとしました

e.Handled = true;

e.SuppressKeyPress = true;

テキストボックスにはすでに改行が表示されているため、効果はありません。

何か案は?何か不足していますか?

4

2 に答える 2

2

代わりに OnProcessCmdKey() をオーバーライドする必要があります。これは早期に実行され、どのコントロールもキーストロークを盗むことができないようにします。

于 2010-07-23T18:05:12.990 に答える
1

したがって、これは簡単なことではありませんでした。KeyUp ではなくKeyDownを処理する必要があったことに気付くためだけに、すべてを入力しました。KeyUp は、TextBox の KeyUp の前に発生しますが、明らかに TextBox の KeyDown の後に発生します。

于 2010-07-23T17:46:44.383 に答える