2016-08-02 1 views
-1

J'ai MaskedTextBox que les formats texte pour ressembler (###) ### - ####MaskedTextBox détection d'un onglet

Après avoir entré les 3 premiers chiffres, ils aiment appuyer sur "TAB" à l'ensemble suivant. Malheureusement en appuyant sur TAB, ils sont dans le champ suivant. Mon patron m'a donc demandé de modifier l'application pour que les utilisateurs restent dans le même champ mais que le curseur se trouve dans le groupe suivant.

private void maskedTextBoxHomePhone_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     MaskedTextBox mtb = (MaskedTextBox)sender; 
     if (e.KeyChar == (char)Keys.Tab) 
     { 
      if (mtb.TextLength == 3) 
      { 
       mtb.SelectionStart = 4; 
      } 
     } 
    } 

J'ai aussi essayé

private void maskedTextBoxHomePhone_KeyDown(object sender, KeyEventArgs e) 
    { 
     MaskedTextBox mtb = (MaskedTextBox)sender; 
     if (e.KeyCode == Keys.Tab) 
     { 
      if (mtb.TextLength == 3) 
      { 
       mtb.SelectionStart = 4; 
      } 
     } 
    } 

Répondre

0

onglets ont une signification particulière, qui fera l'objet de modifications, de sorte que le gestionnaire d'événements ne sera pas appelé.

Vous pouvez contourner ce problème en utilisant l'événement Leave d'une zone de texte et en comptant le textLength que vous avez stocké dans une variable locale:

private void maskedTextBoxHomePhone_Leave(object sender, EventArgs e) 
{ 
    if (_mtbTextLength == 3) { //change selection start and goes back to masked text box } 
} 

Quoi qu'il en soit, en fait, je voudrais essayer de convaincre mon patron autrement. Avez-vous vraiment besoin de cela? Onglets sont toujours utilisés pour changer les champs, vous pouvez obtenir vos utilisateurs confus.

Une autre option serait de modifier le comportement des onglets en redéfinissant la ProcessCmdKey:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == Keys.Tab) 
    { 
     //Do something 
    } 
} 
+0

quand je l'utilise ProcessCmdKey, il ne permet pas l'un des autres personnages dans le champ –

+0

alors peut-être vous devriez essayer la première option que j'ai donnée ... si TextLength == 3, vous devriez retourner votre focus à la boîte de texte masquée et mettre la sélection à 4. – Forlani