我有一个winform表单,它有典型的OK和Cancel按钮。
确定按钮被设置为默认按钮。当用户按下ENTER键时,表单将被关闭。
表单还有一个文本框,旁边有一个“搜索”按钮。文本框允许用户输入搜索文本,搜索按钮启动搜索功能。
我希望用户能够在文本框具有输入焦点并激活搜索功能时按ENTER键。
问题是表单在文本框的处理程序获取之前抓取了ENTER键事件。
编辑:我已尝试使用以下事件处理程序,但它们永远不会被命中,并且当Enter键被命中时表单将关闭:
private void txtFilter_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Search();
e.Handled = true;
}
}
private void txtFilter_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Search();
e.Handled = true;
}
}
我也尝试在表单上启用KeyPreview属性并为表单实现KeyDown事件处理程序,但是Enter键似乎永远不会导致任何这些被命中。
实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
尝试处理TextBox的Enter
和Leave
事件,以清除表单的AcceptButton
属性:
private void txtFilter_Enter(object sender, EventArgs e) {
this.AcceptButton = null;
}
private void txtFilter_Leave(object sender, EventArgs e) {
this.AcceptButton = closeButton;
}
然后,您可以根据需要处理KeyUp
事件:
private void txtFilter_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Search();
}
}
答案 1 :(得分:0)
将KeyDown事件处理程序添加到textBox,然后将其添加到
if (e.KeyCode == Keys.Enter)
{
btnSearch.PerformClick();
}