5

I'm trying to create an auto-complete function for the ICSharpCode.TextEditor. But the fileTabs_KeyDown doesn't recognize Enter/Backspace/Tab/...

I tried to add a new KeyEventHandler to the active editor but that doesn't call my KeyDown function.

Maybe I can request the windows messages directly but I don't know how to do this because everyone is only using e.KeyDown or e.KeyPress events.

Please help...

zee
  • 661
  • 1
  • 10
  • 26

3 Answers3

8

ICSharpCode.TextEditor is a composite control. If you attach event handlers to the main text editor, you won't receive any events. You have to attach to the events on textEditor.ActiveTextAreaControl.TextArea instead.

Also, the text editor itself is already handling the events. To intercept key presses, use the special event textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler.

Daniel
  • 14,823
  • 1
  • 50
  • 56
0

As Daniel said you use the 'ActiveTextAreaControl.TextArea' events, to capture, keys like Enter, Space, and Combinations you use code like the following where im catching a CTRL + Space combination:

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

In this example im even retrieving the screen coordinates of the Caret, cuz I want to show a popup window there.

Jhollman
  • 101
  • 1
  • 2
0

The KeyPress, KeyDown and KeyEventHandler to not fire when hitting the Enter / Backspace / Tab Keys.
To trap these key presses, you must handle the KeyUp event.
You can then check the value of KeyEventArgs.KeyCode

blorkfish
  • 17,438
  • 4
  • 28
  • 22