TextBox autocomplete and default buttons

前端 未结 4 510
Happy的楠姐
Happy的楠姐 2020-12-18 06:35

I have a .NET TextBox with AutoComplete feature on the form. The form has also AcceptButton and CancelButton defined. If I try to commit a suggestion with Enter key or close

相关标签:
4条回答
  • 2020-12-18 06:45

    Simple way is to remove AcceptButton and CancelButton properties while you are in auto-complete textbox:

        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;
        }
    
    0 讨论(0)
  • 2020-12-18 06:49

    Do not assign AcceptButton and CancelButton form properties. Set DialogResult in the buttons OnClick event.

    0 讨论(0)
  • 2020-12-18 06:58

    Another option is to derive your own custom TextBox class that performs validation when Enture/Return is pressed:

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-18 07:08

    instead to Accept and Cancel buttons you can go for the following approach:

    1. Set KeyPreview property for the form to true.
    2. Handle the KeyDown event of the form, in the handler method you can have something similar to the below code

      switch (e.KeyCode)
      {
          case Keys.Enter:
          {
              if (!txtAuto.Focused)
              {
                  Save();
              }
              break;
          }
          case Keys.Escape:
          {
              if (!txtAuto.Focused)
              {
                  Close();
              }
              break;
          }
      }
      
    0 讨论(0)
提交回复
热议问题