c#处理空格键事件

时间:2012-11-13 08:26:37

标签: c# wpf

首先,这可能是以前的问题的重复,但这些答案都不起作用 对于许多例子,我甚至没有得到列出的正确程序。

我有TextBoxListBox。我想在文本框中输入一封电子邮件,然后当我按下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);
        }
    }

请有人帮忙。

3 个答案:

答案 0 :(得分:6)

而不是KeyDown事件挂钩文本框的PreviewKeyDown事件 -

<TextBox PreviewKeyDown="txtEmailAddr_KeyDown"/>

来自MSDN文档 -

一些按键,例如TAB,RETURN,ESC和箭头键 被某些控件忽略,因为它们不被视为输入键按下。对于 例如,默认情况下,Button控件忽略箭头键。按箭头 键通常会使焦点移动到上一个或下一个控件。该 箭头键被认为是导航键,通常按这些键 不要为Button提升KeyDown事件。但是,按一个箭头键 Button确实引发了PreviewKeyDown事件。通过处理PreviewKeyDown事件 对于Button并将IsInputKey属性设置为true,您可以提高 按下箭头键时的KeyDown事件。但是,如果你处理箭头 键,焦点将不再移动 到上一个或下一个控件。

答案 1 :(得分: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;
        }
    }
}

我可以添加自定义TextBox,它没有处理SpaceKey事件。

答案 2 :(得分:0)

看起来两个方法都应该调用行lstEmails.Items.Add(txtEmail.Text);

您是否尝试在该行设置断点以确保它被调用?

您确定已将文本框的KeyDown事件绑定到您的方法吗?

像这样:

nameOfYourTextBox.KeyDown += new EventHandler(txtEmailAddr_KeyDown);