ICSharpCode.TextEditor - KeyDown问题

时间:2009-09-06 19:37:12

标签: c# autocomplete icsharpcode

我正在尝试为ICSharpCode.TextEditor创建一个自动完成功能。 但fileTabs_KeyDown无法识别Enter / Backspace / Tab /...

我尝试将新的KeyEventHandler添加到活动编辑器中,但这不会调用我的KeyDown函数。

也许我可以直接请求Windows消息,但我不知道如何执行此操作,因为每个人都只使用e.KeyDown或e.KeyPress事件。

请帮忙......

3 个答案:

答案 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的屏幕坐标,因为我想在那里显示一个弹出窗口。