2010-11-02 5 views
2

J'utilise C# et travaille sur un programme Winform, lorsqu'un utilisateur clique dans une zone de texte et appuie sur le bouton retour arrière Je veux effacer la zone de texte plutôt que de supprimer personnage à la fois. Comment puis-je faire ceci?C# Comment effacer une zone de texte lorsque le bouton retour arrière est pressé?

Un grand merci Steve

+6

Cela ne ressemble pas à un bonne idée, d'un point de vue de l'utilisabilité. Je pourrais causer la confusion de l'utilisateur, puisque le comportement habituel est de ne supprimer qu'un seul caractère. –

+3

Vous pouvez considérer que tout le texte de la zone de texte apparaît sélectionné chaque fois qu'il reçoit le focus d'entrée de sorte qu'une pression sur la touche de retour arrière (ou n'importe quelle touche, s'ils commencent à taper) effacera la zone de texte. C'est le même comportement que les barres d'adresse de la plupart des navigateurs Web, donc les utilisateurs le trouveront familier. Il peut toujours accomplir ce que vous voulez, tout en conservant la possibilité de supprimer un caractère à la fois si nécessaire. –

Répondre

9

Vous pouvez vous abonner à l'événement KeyPress et effacer le texte de l'expéditeur:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 8) 
    { 
     ((TextBox)sender).Clear(); 
    } 
} 
1

Abonnez-vous à l'événement KeyDown et lorsque la touche enfoncée est égale à backspace, il vous suffit d'effacer la zone de texte.

2

Si c'est un utilisateur domaine vont entrer du texte dans, s'il vous plaît considérer que certains utilisateurs (comme moi) ont le naturel inclinaison à frapper Backspace quand ils font une faute de frappe. Je trouverais cela gênant si cela efface tout ce que je viens de taper.

Comme alternative, vous pouvez ajouter ce comportement s'ils ont fait un retour arrière. Le code ci-dessous supprimera tout avant le caret sur un Shift-Backspace, mais laissera aussi le comportement attendu de la suppression de la sélection uniquement si l'utilisateur a sélectionné du texte:

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    // if shift-backspace is pressed and nothing is selected, 
    // delete everything before the caret 
    if (e.Shift && e.KeyCode == Keys.Back && textBox1.SelectionLength == 0) 
    { 
     textBox1.Text = textBox1.Text.Substring(textBox1.SelectionStart); 
     e.Handled = true; 
    } 
} 
1
private void button1_Click(object sender, EventArgs e) 
{ 
    int textlength = textBox1.Text.Length; 
    if (textlength > 0) 
    { 
     textBox1.Text = textBox1.Text.Substring(0, textlength - 1); 
    } 
    textBox1.Focus(); 
    textBox1.SelectionStart = textBox1.Text.Length; 
    textBox1.SelectionLength = 0; 
} 
Questions connexes