我正在尝试为ICSharpCode.TextEditor创建一个自动完成功能。 但fileTabs_KeyDown无法识别Enter / Backspace / Tab /...
我尝试将新的KeyEventHandler添加到活动编辑器中,但这不会调用我的KeyDown函数。
也许我可以直接请求Windows消息,但我不知道如何执行此操作,因为每个人都只使用e.KeyDown或e.KeyPress事件。
请帮忙......
答案 0 :(得分:8)
ICSharpCode.TextEditor是一个复合控件。如果将事件处理程序附加到主文本编辑器,则不会收到任何事件。你必须在textEditor.ActiveTextAreaControl.TextArea上附加事件。
此外,文本编辑器本身已经在处理事件。要拦截按键,请使用特殊事件textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler。
答案 1 :(得分:0)
按下Enter / Backspace / Tab键时不会触发的KeyPress,KeyDown和KeyEventHandler。
要捕获这些按键,您必须处理KeyUp事件
然后,您可以检查KeyEventArgs.KeyCode
答案 2 :(得分:0)
正如Daniel所说,您使用'ActiveTextAreaControl.TextArea'事件来捕获Enter,Space和Combinations等键,您可以使用以下代码来捕捉CTRL + Space组合:
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()));
}
}
在这个例子中我甚至检索了Caret的屏幕坐标,因为我想在那里显示一个弹出窗口。