0

というテキスト ボックスSearchBoxを持つというカスタム コントロールを作成しています。ControlTemplatesearchTextBox

何らかの処理を行うsearchTextBox.TextChangedイベントのハンドルがありますが、空白を処理する別のメソッドが必要です。

PreviewTextInputイベントは空白で発生しないため、使用できません。私も処理を試みPreviewKeyDownましたが、空白をキャッチする場合とキャッチしない場合があるという予測できない動作があるようです。

で発生する前に空白をキャッチするにはどうすればよいTextBoxですか?

4

5 に答える 5

0

イベントを割り当てて、次のKeyDownようなことができます。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Space)
    {
        // handle whitespace
    }
}

テキストボックスに空白を表示したくない場合は、設定できますe.SuppressKeyPress = true;

于 2013-10-24T07:44:50.890 に答える
0

etaiso が答えたように、KeyDown または PreviewKeyDown イベントを割り当てることができます。etaiso の回答は、wpf ではなく Windows フォームに基づいています。SuppressKeyPress の代わりに e.Handle = ture を指定できます

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Space)
    {
        e.Hanlded = true; // SuppressKeyPress is for windows form
    }
}
于 2013-10-24T08:36:10.717 に答える
0

PreviewKeyDownと同様に試してみてくださいTextChanged

すべてのキーが に取り込まれるわけではありませんTextChanged。バックスペースは主な犯罪者です。

いずれかのイベント ハンドラー内のテキストを変更する場合は、できる限り現在の選択内容を保存して復元してください。そうしないと、カラットが常にテキストボックスの先頭に切り替わり、ユーザーにとって非常に煩わしくなります。

なぜ両方?

テキストの貼り付けや切り取りなどのキー以外の操作はトリガーされませんPreviewKeyDown

于 2013-10-24T07:42:19.310 に答える