2008-11-09 7 views
6

J'utilise un RichTextBox dans WinForms 3.5 et j'ai constaté que lorsque je modifie par programmation le texte contenu, ces modifications ne sont plus disponibles pour la fonctionnalité d'annulation intégrée..NET RichTextBox undo

Existe-t-il un moyen de rendre ces modifications disponibles pour annuler/rétablir?

+0

voulez-vous dire "par programmation"? :) –

+0

haha ​​.... oui, le plus certainement signifiait par programme –

Répondre

2

Voici juste un code j'ai décidé de mess avec:

 string buffer = String.Empty; 
     string buffer2 = String.Empty; 
     public Form3() 
     { 
      InitializeComponent(); 
      this.richTextBox1.KeyDown += new KeyEventHandler(richTextBox1_KeyDown); 
      this.richTextBox1.TextChanged += new EventHandler(richTextBox1_TextChanged); 
     } 

     void richTextBox1_TextChanged(object sender, EventArgs e) 
     { 
      buffer2 = buffer; 
      buffer = richTextBox1.Text; 
     } 

     void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.Control && e.KeyCode == Keys.Z) 
      { 
       this.richTextBox1.Text = buffer2; 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      richTextBox1.Text = "Changed"; 
     } 

Il me essentiellement à écrire ma propre fonction Annuler. Tout ce que je fais est de stocker l'ancienne valeur dans une variable tampon, et la nouvelle valeur dans une deuxième variable tampon. Chaque fois que le texte change, ces valeurs sont mises à jour. Ensuite, si l'utilisateur tape "CTRL-Z", il remplace le texte par l'ancienne valeur. Pirater? Un peu. Mais, cela fonctionne pour la plupart.

+1

Vous voudriez probablement une liste d'éléments à la place, permettant plusieurs touches d'annulation, et si vous voulez aller tout le chemin, vous construiriez une refonte ainsi – Oskar