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 事件的自定义文本框。

于 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 回答