【问题标题】:ICSharpCode.TextEditor - KeyDown problemICSharpCode.TextEditor - KeyDown 问题
【发布时间】:2010-11-26 01:39:48
【问题描述】:

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

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

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

请帮忙...

【问题讨论】:

  • 我通过获取 KeyStates 解决了这个问题
  • 请提供您的解决方案作为答案,以便其他人在遇到此问题时能够轻松找到它。
  • @zee 你是怎么做到的,你能提供答案吗?

标签: c# autocomplete icsharpcode


【解决方案1】:

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

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

【讨论】:

  • 谢谢丹尼尔,最近几天你帮了我很多忙!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    正如 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()));
            }
        }
    

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

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多