2011-12-14 129 views
2

我在窗体上有一个带有自动完成功能的.NET TextBox。该表格还定义了AcceptButtonCancelButton。如果我尝试使用Enter键提交建议,或者以Esc关闭下拉菜单,我的表单会关闭。WinForms文本框自动完成事件

我的想法是创建我的自定义文本框从TexBox继承和捕捉Enter键和Escape关键,但只有当自动完成用户界面是可见的。我怎么知道自动完成列表何时可见?

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

当自动完成列表显示时,您在MyTextBox WndProc方法上接收到什么消息?也许你可以捕获该消息 – 2011-12-14 16:48:02

+0

其实这是我的问题:-) – 2011-12-14 16:57:40

回答

1

我过去使用的简单解决方案是在文本框具有焦点时删除“接受”和“取消”按钮关联。

textBox1.Enter += (o, args) => 
            { 
             AcceptButton = null; 
             CancelButton = null; 
            }; 
    textBox1.Leave += (o, args) => 
            { 
             AcceptButton = btnOK; 
             CancelButton = btnCancel; 
            };