2009-07-01 101 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; 
    } 
}