首先,这可能是以前的问题的重复,但这些答案都不起作用 对于许多例子,我甚至没有得到列出的正确程序。
我有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);
}
}
请有人帮忙。
答案 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);