我在表单上有一个带有自动完成功能的.NET TextBox。表单还定义了AcceptButton和CancelButton。如果我尝试使用Enter键提交建议或使用Esc关闭下拉菜单,我的表单将关闭。 我该如何防止这种行为?
答案 0 :(得分:2)
不要指定AcceptButton和CancelButton表单属性。在OnClick事件按钮中设置DialogResult。
答案 1 :(得分:2)
简单的方法是在自动完成文本框中删除 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;
}
答案 2 :(得分:0)
而不是“接受”和“取消”按钮,您可以采用以下方法:
处理表单的 KeyDown 事件,在处理程序方法中,您可以使用与以下代码类似的内容
switch (e.KeyCode)
{
case Keys.Enter:
{
if (!txtAuto.Focused)
{
Save();
}
break;
}
case Keys.Escape:
{
if (!txtAuto.Focused)
{
Close();
}
break;
}
}
答案 3 :(得分:0)
另一种选择是派生自己的自定义TextBox类,在按下Enture / Return时执行验证:
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;
}
}