8
votes

Comment déplacer le caretlet de texte à droite

Je voudrais changer tous les caractères entrés dans une zone de texte en majuscule. Le code ajoutera le caractère, mais comment puis-je déplacer le caret sur la droite?

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


4 commentaires

Quel cadre GUI utilisez-vous? Est-ce que ces formulaires de victoire? WPF? Silverlight?


@ Monkey_boys-j'espère que mes changements ont laissé votre sens intact.


Notez que textbox3.text + = e.keychar.tostring (). Toupper () Ajoutez toujours le nouveau caractère du dernier dans la zone de texte, même si le calet est au milieu du texte.


@John Macintyre- Je pense qu'il voulait dire qu'il souhaitait que le curseur soit au bon côté du caractère nouvellement inséré.


6 Réponses :


18
votes

Définit le caractérisation Propriété de la boîte à texte à supérieure ; Ensuite, 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 string même si le caret d'entrée est au milieu de la chaîne (dont la plupart des utilisateurs trouveront très déroutant). Pour la même raison, nous ne pouvons pas supposer que le cachet d'entrée doit apparaître à la fin de la chaîne après avoir saisi le caractère.

Si vous voulez toujours vraiment faire cela en code, quelque chose comme ça devrait fonctionner: < / p> xxx


1 commentaires

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



1
votes

Cela préservera l'emplacement du point d'insertion (mais je vais d'aller avec la réponse donnée par Fredrik Mörk) XXX

SelectionStart pourrait effectivement être appelé Selstart, je n'ai pas T avoir un compilateur pratique pour le moment.


0 commentaires

1
votes

Si vous devez le faire manuellement, vous pouvez utiliser

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


0 commentaires

0
votes

Une autre méthode consiste simplement à modifier 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);
        }
    }


0 commentaires

13
votes
            tbNumber.SelectionStart = tbNumber.Text.ToCharArray().Length;
            tbNumber.SelectionLength = 0;

1 commentaires

C'est un excellent moyen d'ajouter du texte avant les types d'utilisateurs.



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

0 commentaires