.NET RichTextBox отменить - PullRequest
       10

.NET RichTextBox отменить

6 голосов
/ 09 ноября 2008

Я использую RichTextBox в WinForms 3.5 и обнаружил, что когда я программно редактирую содержащийся текст, эти изменения больше не доступны для встроенной функции отмены.

Есть ли способ сделать так, чтобы эти изменения были доступны для отмены / повтора?

1 Ответ

2 голосов
/ 09 ноября 2008

Вот лишь некоторый код, с которым я решил поиграться:

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

Это в основном я пишу свою собственную функцию отмены. Все, что я делаю, хранит старое значение в одной буферной переменной, а новое значение во второй буферной переменной. Каждый раз, когда текст изменяется, эти значения обновляются. Затем, если пользователь нажимает «CTRL-Z», он заменяет текст старым значением. Hack? Немного. Но это работает по большей части.

...