2008-11-09 19 views
6

Ich verwende eine RichTextBox in WinForms 3.5 und ich fand, dass, wenn ich den enthaltenen Text programmgesteuert bearbeiten, diese Änderungen nicht mehr für die integrierte Rückgängig-Funktionalität verfügbar sind..NET RichTextBox rückgängig machen

Gibt es eine Möglichkeit, diese Änderungen für Undo/Redo verfügbar zu machen?

+0

meinst du "programmgesteuert"? :) –

+0

haha ​​.... ja, auf jeden Fall programmatisch gemeint –

Antwort

2

Hier nur einige Code, den ich mess entschieden um mit:

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

Es ist im Grunde das Schreiben mir meine eigene Funktion rückgängig machen. Ich speichere nur den alten Wert in einer Puffervariablen und den neuen Wert in einer zweiten Puffervariablen. Jedes Mal, wenn sich der Text ändert, werden diese Werte aktualisiert. Wenn der Benutzer dann "STRG-Z" drückt, wird der Text durch den alten Wert ersetzt. Hacken? Ein bisschen. Aber es funktioniert größtenteils.

+1

Sie würden wahrscheinlich eine Liste von Elementen stattdessen wollen, so dass mehrere Tasten rückgängig machen, und wenn Sie den ganzen Weg gehen möchten, würden Sie auch ein Redo bauen – Oskar