2010-05-18 11 views
2

Utilisation de C# dans 2008 Express. J'ai une zone de texte contenant un chemin. J'ajoute un "\" à la fin de Leave Event. Si l'utilisateur appuie sur la touche 'Échap', je veux que l'ancien contenu soit restauré. Quand je tape tout le texte et que j'appuie sur 'Escape', j'entends un bruit sourd et l'ancien texte n'est pas restauré. Voici ce que j'ai jusqu'à présent ...C# événements winforms restaurer le contenu de la zone de texte lors de l'échappement

public string _path; 
    public string _oldPath; 

     this.txtPath.KeyPress += new System.Windows.Forms.KeyPressEventHandler(txtPath_CheckKeys); 
     this.txtPath.Enter +=new EventHandler(txtPath_Enter); 
     this.txtPath.LostFocus += new EventHandler(txtPath_LostFocus); 

    public void txtPath_CheckKeys(object sender, KeyPressEventArgs kpe) 
    {   if (kpe.KeyChar == (char)27) 
     { 
      _path = _oldPath; 
     } 
    } 

    public void txtPath_Enter(object sender, EventArgs e) 
    { 
     //AppendSlash(sender, e); 
     _oldPath = _path; 
    } 
    void txtPath_LostFocus(object sender, EventArgs e) 
    { 
     //throw new NotImplementedException(); 
     AppendSlash(sender, e); 
    } 
    public void AppendSlash(object sender, EventArgs e) 
    { 
     //add a slash to the end of the txtPath string on ANY change except a restore 
     this.txtPath.Text += @"\"; 
    } 

Merci à l'avance,

+2

Je suggère d'utiliser 'kpe.KeyCode ==' Keys.Escape' au lieu de 'kpe.KeyChar == (char) 27'. – Powerlord

Répondre

3

Votre fonction txtPath_CheckKeys attribue le chemin de l'ancien chemin, mais jamais mises à jour en fait le texte dans la zone de texte. Je suggère de changer à ceci:

public void txtPath_CheckKeys(object sender, KeyPressEventArgs kpe) 
{ 
    if (kpe.KeyCode == Keys.Escape) 
    { 
     _path = _oldPath; 
     this.txtPath.Text = _path; 
    } 
} 
+0

+1 Bien sûr! = P Je cherchais un peu trop loin, je suppose! Hehehe ... –

+0

@Will Marcouiller: J'ai été brûlé par les choses évidentes trop souvent ... J'ai tendance à chercher les premiers maintenant. – Powerlord

+0

Merci Will! tu es un génie. C'était ça. Je pensais que le coup de poing était la frappe au clavier. Cette instruction if "(kpe.KeyChar == (char) 27)" était la seule façon de le faire. Intellisense ne m'a pas donné l'option de kpe.KeyCode. Je cours VS2008 Express. Merci encore, – user344282

1

L'événement Control.Validating pourrait vous aider.

Il décrit l'ordre dans lequel les événements sont déclenchés. Ainsi, choisir l'événement qui répond le mieux à vos besoins facilitera la mise en œuvre de cette fonctionnalité.

Il pourrait être trop pour le besoin, mais en essayant de Invalidate le contrôle pourrait aider aussi. Faites-moi savoir si cela aide.

+0

Bon point ... l'événement LostFocus ne se déclenche pas toujours quand un bouton est activé via le clavier, mais l'événement de validation le fait. – Powerlord