2009-09-06 19 views
5

Estoy intentando crear una función de autocompletar para ICSharpCode.TextEditor. Pero el fileTabs_KeyDown no reconoce Enter/retroceso/Tab/...ICSharpCode.TextEditor - Problema KeyDown

He intentado añadir un nuevo KeyEventHandler al editor activo, pero que no llama a mi función KeyDown.

Tal vez pueda solicitar los mensajes de Windows directamente, pero no sé cómo hacerlo porque todos solo están utilizando los eventos e.KeyDown o e.KeyPress.

Por favor ayuda ...

+1

He resuelto este problema obteniendo KeyStates – zee

+2

Proporcione su solución como respuesta para que otras personas puedan encontrarla fácilmente si también tienen este problema. – mkchandler

+0

@zee ¿cómo hiciste esto? ¿Puedes dar una respuesta? – MoonKnight

Respuesta

8

ICSharpCode.TextEditor es un control compuesto. Si asocia manejadores de eventos al editor de texto principal, no recibirá ningún evento. En su lugar, debe adjuntar a los eventos en textEditor.ActiveTextAreaControl.TextArea.

Además, el editor de texto ya está manejando los eventos. Para interceptar pulsaciones de teclas, utilice el evento especial textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler.

+0

Gracias Daniel, ¡en los últimos días me has ayudado una tonelada! –

0

El KeyPress, KeyDown y KeyEventHandler no se disparan al presionar las teclas Enter/Backspace/Tab.
Para interceptar estas pulsaciones de tecla, debe manejar el evento KeyUp.
entonces usted puede comprobar el valor de KeyEventArgs.KeyCode

0

Como dijo Daniel utiliza eventos del 'ActiveTextAreaControl.TextArea', para capturar, teclas como entrar, espacio, y combinaciones que usar un código como el siguiente, donde la captura de un im CTRL + Espacio combinación:

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

En este ejemplo im incluso recuperar las coordenadas de pantalla del cursor, porque yo quiero mostrar una ventana emergente allí.

Cuestiones relacionadas