TextBox自动完成和默认按钮

时间:2009-07-01 12:04:49

标签: c# .net winforms textbox autocomplete

我在表单上有一个带有自动完成功能的.NET TextBox。表单还定义了AcceptButton和CancelButton。如果我尝试使用Enter键提交建议或使用Esc关闭下拉菜单,我的表单将关闭。 我该如何防止这种行为?

4 个答案:

答案 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)

而不是“接受”和“取消”按钮,您可以采用以下方法:

  1. 将表单的 KeyPreview 属性设置为true。
  2. 处理表单的 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;
    }
}
相关问题