2008-11-09 15 views
6

Używam RichTextBox w WinForms 3.5 i odkryłem, że kiedy programowo edytuję tekst, zmiany te nie są już dostępne dla wbudowanej funkcji cofania..NET RichTextBox undo

Czy istnieje sposób, aby te zmiany były dostępne do cofnięcia/ponowienia?

+0

czy masz na myśli "programowo"? :) –

+0

haha ​​.... tak, zdecydowanie oznaczało programowo –

Odpowiedz

2

Oto tylko niektóre kod postanowiłem poeksperymentować z:

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

Jest to w zasadzie mi pisać własną funkcję Cofnij. Wszystko, co robię, to przechowywanie starej wartości w jednej zmiennej buforowej i nowej wartości w drugiej zmiennej buforowej. Za każdym razem, gdy tekst się zmienia, wartości te są aktualizowane. Następnie, jeśli użytkownik kliknie "CTRL-Z", zastępuje tekst starą wartością. Włamać się? Trochę. Ale działa w przeważającej części.

+1

Prawdopodobnie chciałbyś zamiast tego listy przedmiotów, pozwalającej na wielokrotne cofanie naciśnięć klawiszy, a jeśli chcesz przejść całą drogę, to możesz również stworzyć powtórzenie – Oskar