2009-09-06 42 views
5

我正在嘗試爲ICSharpCode.TextEditor創建一個自動完成函數。 但fileTabs_KeyDown無法識別Enter/Backspace/Tab/...ICSharpCode.TextEditor - KeyDown問題

我試圖添加一個新的KeyEventHandler到活動編輯器,但不會調用我的KeyDown函數。

也許我可以直接請求Windows消息,但我不知道該怎麼做,因爲每個人都只使用e.KeyDown或e.KeyPress事件。

請幫忙...

+1

我通過獲得KeyStates解決了這個問題 – zee

+2

請提供您的解決方案作爲答案,以便其他人能夠輕鬆找到它,如果他們也有這個問題。 – mkchandler

+0

@zee你是如何做到這一點的,你能提供一個答案嗎? – MoonKnight

回答

8

ICSharpCode.TextEditor是一個複合控件。如果將事件處理程序附加到主文本編輯器,則不會收到任何事件。相反,您必須附加到textEditor.ActiveTextAreaControl.TextArea上的事件。

此外,文本編輯器本身已經處理事件。要攔截按鍵,請使用特殊事件textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler。

+0

謝謝丹尼爾,過去幾天你幫我一噸! –

0

KeyPress,KeyDown和KeyEventHandler在點擊Enter/Backspace/Tab鍵時不會觸發。
要捕獲這些按鍵,您必須處理KeyUp事件。
就可以檢查KeyEventArgs.KeyCode

0

的值作爲丹尼爾說你用「ActiveTextAreaControl.TextArea」事件,捕捉,像回車,空格鍵和組合使用類似於下面的代碼,其中IM受涼Ctrl +空格鍵組合:

public frmConexon() 
    { 
     InitializeComponent(); 
     this.txtEditor.ActiveTextAreaControl.TextArea.KeyUp += new System.Windows.Forms.KeyEventHandler(TextArea_KeyUp); 
    } 

    void TextArea_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Space && e.Control) 
     { 
      TextArea S = (TextArea)sender; 
      MessageBox.Show(string.Format("CTRL + Spacio ({0})", S.Caret.ScreenPosition.ToString())); 
     } 
    } 

在這個例子中,即使即時檢索符的屏幕座標,因爲我想展示一個彈出窗口出現。