TextBox自动完成和默认按钮
我在表单上有一个带有自动完成function的.NET TextBox。 表单还定义了AcceptButton和CancelButton。 如果我尝试使用Enter键提交建议或使用Esc关闭下拉菜单,我的表单将关闭。 我该如何防止这种行为?
不要分配AcceptButton和CancelButton表单属性。 在按钮OnClick事件中设置DialogResult。
简单的方法是在自动完成文本框中删除AcceptButton和CancelButton属性:
public Form1() { InitializeComponent(); txtAuto.Enter +=txtAuto_Enter; txtAuto.Leave +=txtAuto_Leave; } private void txtAC_Enter(object sender, EventArgs e) { AcceptButton = null; CancelButton = null; } private void txtAC_Leave(object sender, EventArgs e) { AcceptButton = btnOk; CancelButton = btnCancel; }
而不是接受和取消按钮,您可以采取以下方法:
- 将表单的KeyPreview属性设置为true。
-
处理表单的KeyDown事件,在处理程序方法中,您可以使用类似于下面的代码
switch (e.KeyCode) { case Keys.Enter: { if (!txtAuto.Focused) { Save(); } break; } case Keys.Escape: { if (!txtAuto.Focused) { Close(); } break; } }
另一个选项是派生自己的自定义TextBox类,在按下Enture / Return时执行validation:
public class MyTextBox : TextBox { protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.Enter || keyData == Keys.Return) { // Perform validation here return true; } else return false; } }