2008-11-09 33 views
6

Tôi đang sử dụng RichTextBox trong WinForms 3.5 và tôi thấy rằng khi tôi lập trình chỉnh sửa văn bản có chứa, những thay đổi đó không còn khả dụng cho chức năng hoàn tác được tạo sẵn..NET RichTextBox undo

Có cách nào để làm cho các thay đổi này có sẵn để hoàn tác/làm lại không?

+0

ý của bạn là "theo chương trình"? :) –

+0

haha ​​.... vâng, chắc chắn có nghĩa là lập trình –

Trả lời

2

Dưới đây là chỉ một số mã tôi quyết định lộn xộn xung quanh với:

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

Đó là cơ bản tôi viết tính năng Undo của riêng tôi. Tất cả những gì tôi đang làm là lưu trữ giá trị cũ trong một biến bộ đệm, và giá trị mới trong một biến bộ đệm thứ hai. Mỗi khi văn bản thay đổi, các giá trị này nhận được cập nhật. Sau đó, nếu người dùng nhấn "CTRL-Z", nó sẽ thay thế văn bản bằng giá trị cũ. Hack? Một chút. Nhưng, nó hoạt động cho hầu hết các phần.

+1

Bạn có thể muốn có một danh sách các mục thay thế, cho phép nhiều lần nhấn phím và nếu bạn muốn làm mọi cách bạn cũng muốn tạo lại – Oskar