我在表单上有一个带有自动完成功能的.NET TextBox。该表单还定义了AcceptButton
和CancelButton
。如果我尝试使用Enter
密钥提交建议或使用Esc
关闭下拉菜单,我的表单将会关闭。
我的想法是创建继承自TexBox
并捕获Enter
密钥和Escape
密钥的自定义文本框,但仅限于自动填充UI可见时。我怎么知道自动完成列表何时可见?
public class MyTextBox : TextBox
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (IsOnAutoComplete())
{
if (keyData == Keys.Enter || keyData == Keys.Return)
{
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
换句话说,您知道如何实施IsOnAutoComplete()
方法吗?文本框中是否有任何事件注意到这一点?
任何其他解决方案将不胜感激。提前谢谢。
答案 0 :(得分:1)
我过去使用的一个简单解决方案是在文本框具有焦点时删除“接受”和“取消”按钮关联。
textBox1.Enter += (o, args) =>
{
AcceptButton = null;
CancelButton = null;
};
textBox1.Leave += (o, args) =>
{
AcceptButton = btnOK;
CancelButton = btnCancel;
};