我有一个非常简单的Windows窗体应用程序 . 而且,在Windows(或至少Windows窗体应用程序)中,当您在单行TextBox控件中按Enter键时,您会听到一个丁 . 这是一种不愉快的声音,表示你无法输入换行符,因为它是一个单行的TextBox .
这一切都很好 . 但是,在我的表单中,我有一个TextBox和一个搜索按钮 . 我允许用户在按下Enter后执行搜索,因为他们必须使用鼠标单击“搜索”按钮 .
但是这个丁声就出现了 . 这很烦人 .
我们如何才能使声音在我的表格中根本不发挥?
@David H - 这是我如何检测输入按下:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
12 回答
您可以使用KeyPress而不是KeyUp或KeyDown,它更有效,这里是如何处理
并向'丁'说和平
查看Form.AcceptButton属性 . 您可以使用它来指定表单的默认按钮,在这种情况下是按Enter键 .
来自文档:
当用户按下escape时,还有一个CancelButton属性 .
这个对我有用:
SuppressKeyPress是真正的技巧 . 我希望能帮助你 .
尝试
只需在"if"语句中添加
e.SuppressKeyPress = true;
即可 .处理后,使用
SuppressKeyPress
停止继续处理击键 .我在试图处理一个对我有用的KeyDown时偶然发现了这篇文章 .
按下按键可以阻止事件发送到基础控件 . 如果您手动处理输入键将在该文本框中执行的所有操作,则此操作应该有效 . 抱歉Visual Basic .
任何人都没有机会得到这个答案,但其他一些答案真的很可怕 . 在
KeyDown
上抑制事件会在一次攻击中杀死2个额外事件 . 在此上下文中将e.Handled
属性设置为true
是无用的 .最好的方法是将
Form.AcceptButton
属性设置为实际的搜索按钮 .还有另一种使用
Enter
键的方法 - 有些人可能希望它充当TAB
按钮 . 为此,添加一个新的Button
,将其Location
属性设置在Form
区域之外(即(-100, -100)
) - 将Visible
属性设置为false
可能会在某些情况下禁用Button
处理程序 . 将Form.AcceptButton
属性设置为新按钮 . 在Click
事件处理程序中添加以下代码this.SelectNextControl(ActiveControl, true, true, true, true)
现在,您可能只想在
focus
上focus
时调用focus
,您可能想要测试ActiveControl
类型,或者在控件的事件处理程序中使用e.Supress
属性,而不是使用Enter
作为TAB
即使需要捕获e.KeyCode
将搜索按钮的IsDefault属性设置为
true
. 这将使其成为默认按钮,按下Enter键时将自动单击该按钮 .好吧,我和这个问题住了很长时间,并在这里查找 .
在考虑了这个问题很长一段时间后,想要用最简单的方法来修复它,我想出了最简单但不那么优雅的方法来修复它 .
这就是我做的 .
在表单上放置2个隐形按钮"Ok"和"Cancel" .
将表单上的AcceptButton和CancelButton属性设置为不可见按钮 .
没有为按钮添加代码!
这解决了此线程中列出的所有次要问题,包括ToolStripMenu . 我最大的抱怨是BindingNavigator,当我在当前位置输入记录号以导航并按下回车键时 .
按照程序员按下输入按钮时想要搜索功能的原始问题,我只需将搜索代码放在隐形OK按钮中!
到目前为止,这似乎解决了所有问题,但正如我们所知道的Visual Studio,可能会出现一些问题 .
我能想到的唯一另一种可能的优雅方式是编写一个新的击键处理类,这对我的大多数项目来说都是很有用的 .