我正在嘗試爲ICSharpCode.TextEditor創建一個自動完成函數。 但fileTabs_KeyDown無法識別Enter/Backspace/Tab/...ICSharpCode.TextEditor - KeyDown問題
我試圖添加一個新的KeyEventHandler到活動編輯器,但不會調用我的KeyDown函數。
也許我可以直接請求Windows消息,但我不知道該怎麼做,因爲每個人都只使用e.KeyDown或e.KeyPress事件。
請幫忙...
我正在嘗試爲ICSharpCode.TextEditor創建一個自動完成函數。 但fileTabs_KeyDown無法識別Enter/Backspace/Tab/...ICSharpCode.TextEditor - KeyDown問題
我試圖添加一個新的KeyEventHandler到活動編輯器,但不會調用我的KeyDown函數。
也許我可以直接請求Windows消息,但我不知道該怎麼做,因爲每個人都只使用e.KeyDown或e.KeyPress事件。
請幫忙...
ICSharpCode.TextEditor是一個複合控件。如果將事件處理程序附加到主文本編輯器,則不會收到任何事件。相反,您必須附加到textEditor.ActiveTextAreaControl.TextArea上的事件。
此外,文本編輯器本身已經處理事件。要攔截按鍵,請使用特殊事件textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler。
謝謝丹尼爾,過去幾天你幫我一噸! –
KeyPress,KeyDown和KeyEventHandler在點擊Enter/Backspace/Tab鍵時不會觸發。
要捕獲這些按鍵,您必須處理KeyUp事件。
就可以檢查KeyEventArgs.KeyCode
的值作爲丹尼爾說你用「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()));
}
}
在這個例子中,即使即時檢索符的屏幕座標,因爲我想展示一個彈出窗口出現。
我通過獲得KeyStates解決了這個問題 – zee
請提供您的解決方案作爲答案,以便其他人能夠輕鬆找到它,如果他們也有這個問題。 – mkchandler
@zee你是如何做到這一點的,你能提供一個答案嗎? – MoonKnight