2016-08-02 11 views
-1

Ich habe einen MaskedTextBox, den Text wie aussehen Formate (###) ### - ####MaskedTextBox Erfassen eine Lasche

die ersten 3 Ziffern nach der Eingabe, die sie gerne drücken "TAB" zum nächsten Satz. Leider sind sie durch Drücken von TAB im nächsten Feld.

Also hat mich mein Chef gebeten, die Anwendung so zu ändern, dass die Benutzer im selben Feld bleiben, aber der Cursor in der nächsten Gruppe ist.

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

Ich habe auch versucht

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

Antwort

0

Tabs eine besondere Bedeutung haben, dass der Fokus ändern bewirkt, so dass die Event-Handler nicht aufgerufen wird erhalten.

Sie können dieses Problem umgehen, indem das Leave-Ereignis eines Textfelds verwenden und die textLength zählen, die Sie in einigen lokalen Variablen gespeichert haben:

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

Wie auch immer, eigentlich würde ich versuchen, meinen Chef davon zu überzeugen, Andernfalls. Haben Sie das wirklich nötig? ? Tabs werden immer verwendet, um Felder zu ändern, Sie können Ihre Benutzer verwirrt bekommen.

Eine weitere Möglichkeit durch Überschreiben der ProcessCmdKey wäre die Tab-Verhalten zu ändern:

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

wenn ich ProcessCmdKey verwenden, ist es nicht eine der anderen Zeichen in das Feld erlauben –

+0

dann versuchen, vielleicht sollten Sie die erste Option, die ich gab ... Wenn die TextLength == 3, sollten Sie Ihren Fokus auf das maskierte Textfeld zurückgeben und den Start der Auswahl auf 4 setzen. – Forlani