文本框自动完成和默认的按钮(TextBox autocomplete and default but

2019-06-24 15:23发布

我有一个窗体上的自动完成功能在.NET文本框。 该表格还的AcceptButton和CancelButton定义。 如果我试图提交一个建议用回车键或关闭下拉与Esc键,我的窗体关闭。 如何防止这种行为?

Answer 1:

不分配的AcceptButton和CancelButton表单属性。 在按钮OnClick事件设置的DialogResult。



Answer 2:

简单的方法是当你在自动完成的文本框删除的AcceptButtonCancelButton属性:

    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;
    }


Answer 3:

而不是接受和取消按钮,你可以去下面的方法:

  1. 设置KeyPreview属性的形式来实现。
  2. 处理窗体的KeyDown事件,在处理方法,你可以有类似于下面的代码的东西

     switch (e.KeyCode) { case Keys.Enter: { if (!txtAuto.Focused) { Save(); } break; } case Keys.Escape: { if (!txtAuto.Focused) { Close(); } break; } } 


Answer 4:

另一种选择是获得当按下Enture /返回执行验证自己的自定义TextBox类:

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;
    }
}


文章来源: TextBox autocomplete and default buttons