2009-07-24 4 views
8

Je souhaite remplacer tous les caractères entrés dans une zone de texte par des majuscules. Le code ajoutera le caractère, mais comment déplacer le curseur vers la droite?Comment déplacer le curseur de la zone de texte vers la droite

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    textBox3.Text += e.KeyChar.ToString().ToUpper(); 
    e.Handled = true; 
} 
+0

ce cadre GUI utilisez-vous? Est-ce des formes de victoire? wpf? Silverlight? –

+0

@ monkey_boys-J'espère que mes changements ont laissé votre sens intact. –

+0

Notez que 'textBox3.Text + = e.KeyChar.ToString(). ToUpper()' ajoutera toujours le nouveau caractère en dernier dans la zone de texte, même si le signe insertion est au milieu du texte. –

Répondre

18

Définissez la propriété CharacterCasing du TextBox-Upper; alors vous n'avez pas besoin de le traiter manuellement.

Notez que textBox3.Text += e.KeyChar.ToString().ToUpper(); ajoutera le nouveau caractère à la fin de la chaîne même si le caret d'entrée est au milieu de la chaîne (que la plupart des utilisateurs trouveront très confus). Pour la même raison, nous ne pouvons pas supposer que le curseur d'entrée doit apparaître à la fin de la chaîne après avoir entré le caractère.

Si vous voulez quand même vraiment faire cela dans le code, quelque chose comme cela devrait fonctionner:

// needed for backspace and such to work 
if (char.IsControl(e.KeyChar)) 
{ 
    return; 
} 
int selStart = textBox3.SelectionStart; 
string before = textBox3.Text.Substring(0, selStart); 
string after = textBox3.Text.Substring(before.Length); 
textBox3.Text = string.Concat(before, e.KeyChar.ToString().ToUpper(), after); 
textBox3.SelectionStart = before.Length + 1; 
e.Handled = true; 
+0

+1: J'ai fourni une réponse alternative car elle peut être utile dans d'autres situations. –

1

Cela permettra de préserver l'emplacement du point d'insertion (mais persionally je partirais avec la réponse donnée par Fredrik Mörk)

private void textBox3_KeyPress(object sender, KeyPressEventArgs e)  
{   
    int selStart = textBox3.SelectionStart; 
    textBox3.Text += e.KeyChar.ToString().ToUpper();   
    textBox3.SelectionStart = selStart; 
    e.Handled = true; 
} 

SelectionStart pourrait en fait être appelé SelStart, je ne dispose pas d'un compilateur à portée de main pour le moment.

1

Si vous devez le faire manuellement, vous pouvez utiliser

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    textBox3.Text += e.KeyChar.ToString().ToUpper(); 
    textBox3.SelectionStart = textBox3.Text.Length; 
    e.Handled = true; 
} 

Mais le code précédent insère le nouveau caractère à la fin du texte. Si vous voulez l'insérer à l'emplacement du curseur:

private void textBox3_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    int selStart = textBox3.SelectionStart; 
    textBox3.Text = textBox3.Text.Insert(selStart,e.KeyChar.ToString().ToUpper()); 
    textBox3.SelectionStart = selStart + 1; 
    e.Handled = true; 
} 

Ce code insère le nouveau caractère à la position du curseur et déplace le curseur vers la gauche du caractère nouvellement inséré.

Mais je pense toujours que le réglage de CharacterCasing est meilleur.

0

Une autre méthode consiste à changer juste la valeur du KeyChar lui-même:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { 
     if ((int)e.KeyChar >= 97 && (int)e.KeyChar <= 122) { 
      e.KeyChar = (char)((int)e.KeyChar & 0xDF); 
     } 
    } 

Bien que, en utilisant la propriété CharacterCasing est la solution la plus simple.

11
  tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length; 
      tbNumber.SelectionLength = 0; 
+0

Ceci est un excellent moyen d'ajouter du texte avant que l'utilisateur tape. –

+0

+1, Super !!!!!! – ABCD

2
private void txtID_TextChanged(object sender, EventArgs e) 
{ 
    txtID.Text = txtID.Text.ToUpper(); 
    txtID.SelectionStart = txtID.Text.Length; 
} 
Questions connexes