5

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

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

也许我可以直接请求 Windows 消息,但我不知道该怎么做,因为每个人都只使用 e.KeyDown 或 e.KeyPress 事件。

请帮忙...

4

3 回答 3

8

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

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

于 2009-09-09T13:45:13.073 回答
0

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

于 2010-07-28T07:16:39.413 回答
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()));
        }
    }

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

于 2013-05-21T20:01:38.537 回答