2009-09-06 5 views
5

J'essaie de créer une fonction d'auto-complétion pour ICSharpCode.TextEditor. Mais le fileTabs_KeyDown ne reconnaît pas Entrée/Retour arrière/Tab/...ICSharpCode.TextEditor - Problème KeyDown

J'ai essayé d'ajouter un nouveau KeyEventHandler à l'éditeur actif mais cela n'appelle pas ma fonction KeyDown.

Peut-être que je peux demander les messages Windows directement, mais je ne sais pas comment faire parce que tout le monde n'utilise que des événements e.KeyDown ou e.KeyPress.

S'il vous plaît aider ...

+1

J'ai résolu ce problème en obtenant KeyStates – zee

+2

Veuillez fournir votre solution comme réponse afin que d'autres personnes puissent la trouver facilement si elles ont aussi ce problème. – mkchandler

+0

@zee comment avez-vous fait cela, pouvez-vous fournir une réponse? – MoonKnight

Répondre

8

ICSharpCode.TextEditor est un contrôle composite. Si vous attachez des gestionnaires d'événements à l'éditeur de texte principal, vous ne recevrez aucun événement. Vous devez attacher aux événements sur textEditor.ActiveTextAreaControl.TextArea à la place.

De plus, l'éditeur de texte gère déjà les événements. Pour intercepter les touches, utilisez l'événement spécial textEditor.ActiveTextAreaControl.TextArea.KeyEventHandler.

+0

Merci Daniel, ces deux derniers jours tu m'as aidé à sortir une tonne! –

0

Les touches KeyPress, KeyDown et KeyEventHandler ne se déclenchent pas lorsque vous appuyez sur les touches Entrée/Retour arrière/Tabulation.
Pour intercepter ces touches, vous devez gérer l'événement KeyUp.
Vous pouvez alors vérifier la valeur de KeyEventArgs.KeyCode

0

Comme Daniel a dit que vous utilisez les événements « ActiveTextAreaControl.TextArea », pour saisir, clés comme Entrée, Espace et combinaisons que vous utilisez le code comme le suivant où im attraper un CTRL + combinaison spatiale:

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

Dans cet exemple im même récupérer les coordonnées d'écran du Caret, parce que je veux montrer une fenêtre pop-up là-bas.

Questions connexes