ICSharpCode.TextEditor - KeyDown问题

5
我正在尝试为ICSharpCode.TextEditor创建自动完成功能。 但是fileTabs_KeyDown无法识别Enter / Backspace / Tab / ...。
我尝试向活动编辑器添加新的KeyEventHandler,但这不会调用我的KeyDown函数。
也许我可以直接请求Windows消息,但我不知道如何做到这一点,因为每个人都只使用e.KeyDown或e.KeyPress事件。
请帮帮我...

1
我通过获取KeyStates解决了这个问题。 - zee
2
请将您的解决方案作为答案提供,这样其他人在遇到相同问题时也能轻松找到它。 - mkchandler
@zee,你是怎么做到的?能给个答案吗? - MoonKnight
3个回答

8

ICSharpCode.TextEditor是一个复合控件。如果您将事件处理程序附加到主文本编辑器,您将不会收到任何事件。您必须附加到textEditor.ActiveTextAreaControl.TextArea上的事件。

此外,文本编辑器本身已经处理了事件。要拦截键按下,请使用特殊事件textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler。


谢谢你,丹尼尔。最近几天你帮了我很多! - Jeremy Thompson

0
正如Daniel所说,您可以使用“ActiveTextAreaControl.TextArea”事件来捕获键盘按键,例如Enter、Space和组合键。您可以使用以下代码来捕获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()));
        }
    }

在这个例子中,我甚至获取了插入符的屏幕坐标,因为我想在那里显示一个弹出窗口。

0
KeyPress、KeyDown和KeyEventHandler在按下Enter / Backspace / Tab键时不会触发。
要捕获这些按键,必须处理KeyUp事件。
然后,您可以检查KeyEventArgs.KeyCode的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接