2009-09-23 7 views
1

J'ai ce code:C# Désactiver la touche TAB

 
this.searchInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputKeypress); 

private void Keypress(object sender, KeyPressEventArgs e) 
{ 
    // If Tab has been pressed 
    if(122 == (int)e.KeyChar) 
    { 
     switchTab(sTab); 
     MessageBox.Show(sTab); 
    } 
} 

Ce qu'il fait est qu'il met l'accent sur un autre élément. Mais, lorsque le focus est défini sur un TextBox et que j'appuie sur TAB, il fait simplement un onglet dans le TextBox, et ne met pas le focus sur l'élément suivant.

Quelqu'un a eu une idée de comment je peux faire ce travail?

J'ai essayé de définir e.Handled = true; mais cela n'a pas fonctionné ...

+0

Y a-t-il une raison pour laquelle vous déplacez le focus de manière explicite lorsque vous appuyez sur la touche plutôt que sur le mécanisme et l'ordre de tabulation par défaut? – ICR

+0

J'ai besoin de définir tabindex à un panneau, et je ne peux pas voir les propriétés pour le faire. – Ikky

Répondre

4

Avez-vous essayé de définir AcceptsTab sur TextBox à false?

Edit:

yep. Ça ne marche pas. Étrange ... Il tabule encore dans la zone de texte

Cela n'a pas de sens. J'ai couru une petite application de test, et la touche de tabulation procurerait que se concentrer loin de la TextBox lorsque ses AcceptsTabetMultiline propriétés sont à la fois true, quel que soit un gestionnaire d'événements étant défini pour KeyPress.

Etes-vous sûr qu'un autre code ne définit pas AcceptsTab à true? Si oui, est-ce que le réglage Multiline à false change le comportement de l'onglet? Pourriez-vous poster plus de votre code pertinent?

+0

oui. Ça ne marche pas. Étrange ... Il tabule encore dans la zone de texte – Ikky

+0

ah, Multiline est défini sur false. Je vais le mettre à vrai et espère voir que cela aide :) – Ikky

+0

Cela fonctionne maintenant :) Merci! – Ikky

3

Définissez la propriété AcceptsTab de la zone de texte à false?

+0

Oui. Ça ne marche pas. Étrange ... Il tabule encore dans la zone de texte – Ikky

0

Vous aurez besoin de créer une instance de contrôle comme si, et remplacer les méthodes suivantes:

using System.Windows.Forms 

//optional namespace 

public class NoTabTextBox : TextBox 
{ 
    protected override bool IsInputKey(Keys keyData) 
    { 
     switch (keyData) 
     { 
      case Keys.Tab: 
       return true; 
     } 
     return base.IsInputKey(keyData); 
    } 

    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Tab) { e.Handled = true; e.SuppressKeyPress = true; } 
     base.OnKeyDown(e); 
    } 
} 

Générez la solution, Substitut alors vous êtes TextBox régulier avec le nouveau « NoTabTextBox », en le trouvant sous les contrôles utilisateur dans la boîte à outils.

Ceci va capturer la touche de tabulation et la forcer à ne rien faire.