2009-02-04 11 views
2

J'ai besoin d'un comportement personnalisé pour les touches de tabulation dans le contrôle RichTextEdit.Comment intercepter une touche de tabulation dans le contrôle d'édition

CurrentY le meilleur que j'ai est ceci:

editBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.field_PreviewKeyPress); 


    private void field_PreviewKeyPress(object sender, PreviewKeyDownEventArgs e) 
     { 
      switch (e.KeyCode) 
      { 
       case Keys.Tab: 
        //Some code here 
       break; 
      } 
     } 

La touche de tabulation est enregistré très bien, mais après que les processus de contrôle de la clé de toute façon et déplace le focus au contrôle suivant. Il ne semble pas possible de consommer cet événement clé.

Répondre

1

J'ai trouvé moi-même une solution - redéfinir bool RichTextEdit.ProcessCmdKey (ref Message m, Keys keyData).

0

Vous dites que vous utilisez un contrôle "RichTextEdit" mais je suppose que vous voulez dire RichTextBox. Si tel est le cas, vous devriez pouvoir définir la propriété AcceptsTab sur True pour lui permettre de traiter la touche de tabulation.

+0

Malheureusement, cela ne fonctionne que pour multiline RichTextBox. – Viesturs

+0

Vraiment? C'est intéressant! Je vais laisser la réponse ici pour que les autres qui la lisent puissent voir votre commentaire et apprendre pourquoi ce n'est pas * la * réponse. –

1

Peut-être que cet article CodeProject pourrait vous donner quelques indices:

TabKeyIntercept - Intercept and process the Tab key in a Windows.Forms form

[...] Heureusement, dans la classe de base formulaire, il existe la méthode protected override bool ProcessTabKey(bool forward) . En utilisant cette méthode, nous pouvons intercepter et "consommer" la touche Tabulation.

Et, comme il se trouve, si la valeur de retour de la méthode ProcessTabKey() est fausse, la touche Tab ne font dans la méthode OnKeyDown(). Mais, de bien sûr, si votre code "consomme" la touche Tab dans la méthode ProcessTabKey(), vous aurez probablement pas besoin de le traiter dans la méthode OnKeyDown().

En outre, la combinaison de contrôle-onglet en fait la méthode OnKeyDown().

Alors, sachant que ces choses, nous sommes prêts à définir une utilisation personnalisée pour la touche Tab - et nous pouvons coder la forme pour permettre à l'utilisateur d'utiliser la combinaison Control-Tab pour basculer entre le utilisation normale/signification de la touche Tab et notre utilisation personnalisée.

+0

ProcessTabKey est une méthode de formulaire. Il serait très maladroit d'avoir une forme personnalisée, juste pour modifier le comportement d'un champ. – Viesturs

Questions connexes