2

まず、これは以前の質問の繰り返しかもしれませんが、それらの回答はどれも機能しません。
多くの例では、リストされている正しい手順さえわかりません。

私はTextBoxとを持っていListBoxます。テキストボックスに電子メールを入力したいのですが、Spaceキーを押すと、リストボックスに電子メールを追加してから、テキストボックスをクリアする必要があります。

タイトルが示すように、スペースキーをバインドする運がありませんでした。

私が試してみました:

    private void txtEmailAddr_KeyDown(object sender, KeyEventArgs e)
    {
        KeyEventArgs ke = e;
        if (ke != null && ke.Key == Key.Space)
        {
            ke.Handled = false;
        }

        if (ke.Key == Key.Space)
        {
                lstEmails.Items.Add(txtEmail.Text);
        }
    }

    private void txtEmailAddr_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
                lstEmails.Items.Add(txtEmail.Text);
        }
    }

誰か助けてください。

4

3 に答える 3

6

KeyDownイベントフックの代わりにPreviewKeyDown、テキストボックスのイベントを -

<TextBox PreviewKeyDown="txtEmailAddr_KeyDown"/>

MSDN ドキュメントから -

TAB、RETURN、ESC、および矢印キーなどの一部のキーの押下は、入力キーの押下と見なされないため、一部のコントロールでは通常無視されます。たとえば、デフォルトでは、Button コントロールは矢印キーを無視します。通常、矢印キーを押すと、フォーカスが前または次のコントロールに移動します。矢印キーはナビゲーション キーと見なされ、通常、これらのキーを押しても、Button の KeyDown イベントは発生しません。ただし、Button の矢印キーを押すと、PreviewKeyDown イベントが発生します。Button の PreviewKeyDown イベントを処理し、IsInputKey プロパティを true に設定すると、矢印キーが押されたときに KeyDown イベントを発生させることができます。ただし、矢印キーを操作すると、フォーカスが前または次のコントロールに移動しなくなります。

于 2012-11-13T09:02:39.937 に答える
3

使用して

public class SelectableTextBlock : TextBox
{
    public SelectableTextBlock()
    {
        AddHandler(KeyDownEvent, new RoutedEventHandler(HandleHandledKeyDown), true);
    }

    public void HandleHandledKeyDown(object sender, RoutedEventArgs e)
    {
        KeyEventArgs ke = e as KeyEventArgs;
        if(ke != null && ke.Key == Key.Space)
        {
            ke.Handled = false;
        }
    }
}

SpaceKey イベントが処理されないカスタム TextBox を追加できます。

于 2012-11-13T08:35:54.677 に答える
0

両方のメソッドが行を呼び出す必要があるように見えますlstEmails.Items.Add(txtEmail.Text);

その行にブレークポイントを設定して、それが呼び出されることを確認しましたか?

テキストボックスの KeyDown イベントをメソッドにバインドしましたか?

このような:

nameOfYourTextBox.KeyDown += new EventHandler(txtEmailAddr_KeyDown);
于 2012-11-13T08:37:51.857 に答える