2013-07-25 2 views
0

J'utilise le code suivant pour les contrôles suivant et précédent goto dans les fenêtres sous formeNextControl Mise au point à l'aide Entrée et Précédent L'utilisation Backspace dans TextBox

if (e.KeyCode == Keys.Enter)//Next 
{ 
    this.SelectNextControl(this.ActiveControl, true, true, true, true); 
} 
if (e.KeyCode == Keys.Back)//Previous 
{ 
    this.SelectNextControl(this.ActiveControl, false, true, true, true); 
} 

Le problème dans

if (e.KeyCode == Keys.Back) 

Si le contrôle actuel est un TextBox et l'utilisateur essaie de taper et de supprimer un mot en utilisant retour arrière, cette fois cela va fonctionner et mettre le focus sur le contrôle suivant. Comment éviter cet événement lorsque la zone de texte a certaines valeurs? Et il devrait fonctionner pour ComboBox et d'autres contrôles

+0

l'entourent avec 'if (string.IsNullOrWhitespace (textbox.Text))' – wudzik

+0

si je ts un textbox signifie que votre réponse est correcte, mais le formulaire a plus de numéro de textbox @ wudzik – Suresh

+0

Voir ma réponse. mis à jour pour travailler pour toutes les zones de texte. –

Répondre

0

La plupart des gens utilisent l'onglet inverse pour le retour sous forme de gain. mais si vous voulez toujours le faire par le bouton de retour.

Cette morue vous aidera. et vous ne perdez jamais votre char.

if(e.KeyCode==Keys.Back) 
      { 
       if(textBox1.Text.Trim().Length==0){ 
       this.SelectNextControl(this.ActiveControl, false, true, true, true); 
       } 
      } 

c'est un plaisir de vous aider. bienvenue pour vos remerciements

+0

ma question est si l'utilisateur essaie de taper "bon" dans la zone de texte mais parfois il va "godo" donc, il essaie de supprimer en utilisant backspace, donc pas besoin de cet événement, si textbox est vide alors seulement cet événement doit fonctionner – Suresh

+1

Je viens d'éditer ma réponse. maintenant cela ne fonctionnera que lorsque la boîte de texte est vide –

+0

le problème dans "textbox1.text", parce que nous ne pouvons pas spécifier son textbox1 parce que plus de textbox sont là @sourabh devpura – Suresh

1

Une autre mise à jour, probablement pas aussi bon, mais fonctionne. Je recommande la création d'une méthode:

public void checkKey(object sender) 
{ 
    KeyEventArgs a = new KeyEventArgs(Keys.Back); 
    if (sender.GetType().Name == "TextBox") 
    { 
     TextBox tb = (TextBox)sender; 
     if ((a.KeyCode == Keys.Back && String.IsNullOrWhiteSpace(tb.Text))) 
     { 
      this.SelectNextControl(this.ActiveControl, false, true, true, true); 
     } 
    } 
} 

Et puis sur toutes les zones de texte TextChanged événements appel checkKey(sender);

Si vous devez ajouter des contrôles, il suffit d'ajouter dans la condition if.

L'événement que vous utilisez vérifie si une clé sur le formulaire est pressée et non pas sur la zone de texte .

+0

si la zone de texte est dans la zone de groupe cela va fonctionner? @luame Ludik – Suresh

+0

J'en doute, il faut quelques modifications pour le faire aussi. –

+0

mais [email protected] Ludik – Suresh

0

ok alors tout d'abord créer une nouvelle fonction

public TextBoxBackEvent(TextBox tb,Form form){ 
       if(tb.Text.Trim().Length==0){ 
       form.SelectNextControl(form, false, true, true, true); 
} 

maintenant utiliser cette fonction dans ne importe où dans votre application

comme

TextBoxBackEvent(textbox,this); 

et il fonctionnera sorcière que vous voulez exactement

+0

"textbox" ce que cela signifie dans cette opération. est-ce qu'il va vérifier toutes les zones de texte – Suresh

+2

c'est l'objet de zone de texte. je min vous pouvez passer une zone de texte dans cette fonction –

Questions connexes