2008-11-09 20 views
6

Estoy usando un RichTextBox en WinForms 3.5 y encontré que cuando edito el texto de forma programada, esos cambios ya no están disponibles para la funcionalidad de deshacer integrada..NET RichTextBox deshacer

¿Hay alguna manera de hacerlo para que estos cambios estén disponibles para deshacer/rehacer?

+0

¿quisiste decir "programáticamente"? :) –

+0

jaja .... sí, Definitivamente significó programáticamente –

Respuesta

2

información es un ejemplo de código que decidí perder el tiempo con:

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

Se trata básicamente de mí escribir mi propia función Deshacer. Todo lo que hago es almacenar el valor anterior en una variable de memoria intermedia y el nuevo valor en una segunda variable de memoria intermedia. Cada vez que el texto cambia, estos valores se actualizan. Luego, si el usuario pulsa "CTRL-Z", reemplaza el texto con el valor anterior. ¿Cortar? Un poco. Pero, funciona en su mayor parte.

+1

Probablemente querría una lista de artículos en su lugar, permitiendo múltiples pulsaciones de tecla para deshacer, y si quiere hacer todo el camino, también debería hacer una rehacer – Oskar