2009-07-01 66 views
5

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

回答

2

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

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

形式的KeyDown事件不会被解雇。 – Zhenya 2009-07-02 12:54:25

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

另一种选择是获得当按下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; 
    } 
}