WinForms文本框自动完成事件

时间:2011-12-14 12:13:33

标签: .net winforms autocomplete textbox

我在表单上有一个带有自动完成功能的.NET TextBox。该表单还定义了AcceptButtonCancelButton。如果我尝试使用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()方法吗?文本框中是否有任何事件注意到这一点?

任何其他解决方案将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

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