2011-12-14 146 views
2

我在窗體上有一個帶有自動完成功能的.NET TextBox。該表格還定義了AcceptButtonCancelButton。如果我嘗試使用Enter鍵提交建議,或者以Esc關閉下拉菜單,我的表單會關閉。WinForms文本框自動完成事件

我的想法是創建我的自定義文本框從TexBox繼承和捕捉Enter鍵和Escape關鍵,但只有當自動完成用戶界面是可見的。我怎麼知道自動完成列表何時可見?

public class MyTextBox : TextBox 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (IsOnAutoComplete()) 
     { 
      if (keyData == Keys.Enter || keyData == Keys.Return) 
      { 
       return true; 
      } 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

換句話說,你知道我怎麼能實現IsOnAutoComplete()方法嗎?有沒有文本框事件注意到這一點?

任何其他解決方案,將不勝感激。提前致謝。

+0

當自動完成列表顯示時,您在MyTextBox WndProc方法上接收到什麼消息?也許你可以捕獲該消息 – 2011-12-14 16:48:02

+0

其實這是我的問題:-) – 2011-12-14 16:57:40

回答

1

我過去使用的簡單解決方案是在文本框具有焦點時刪除「接受」和「取消」按鈕關聯。

textBox1.Enter += (o, args) => 
            { 
             AcceptButton = null; 
             CancelButton = null; 
            }; 
    textBox1.Leave += (o, args) => 
            { 
             AcceptButton = btnOK; 
             CancelButton = btnCancel; 
            };