我正在尝试为 ICSharpCode.TextEditor 创建一个自动完成功能。但 fileTabs_KeyDown 无法识别 Enter/Backspace/Tab/...
我尝试将新的 KeyEventHandler 添加到活动编辑器,但这不会调用我的 KeyDown 函数。
也许我可以直接请求 Windows 消息,但我不知道该怎么做,因为每个人都只使用 e.KeyDown 或 e.KeyPress 事件。
请帮忙...
我正在尝试为 ICSharpCode.TextEditor 创建一个自动完成功能。但 fileTabs_KeyDown 无法识别 Enter/Backspace/Tab/...
我尝试将新的 KeyEventHandler 添加到活动编辑器,但这不会调用我的 KeyDown 函数。
也许我可以直接请求 Windows 消息,但我不知道该怎么做,因为每个人都只使用 e.KeyDown 或 e.KeyPress 事件。
请帮忙...
ICSharpCode.TextEditor 是一个复合控件。如果您将事件处理程序附加到主文本编辑器,您将不会收到任何事件。您必须附加到 textEditor.ActiveTextAreaControl.TextArea 上的事件。
此外,文本编辑器本身已经在处理这些事件。要拦截按键,请使用特殊事件 textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler。
按下 Enter / Backspace / Tab 键时不会触发 KeyPress、KeyDown 和 KeyEventHandler。
要捕获这些按键,您必须处理 KeyUp 事件。
然后您可以检查 KeyEventArgs.KeyCode 的值
正如 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()));
}
}
在这个例子中,我什至检索了插入符号的屏幕坐标,因为我想在那里显示一个弹出窗口。