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





Вот только код, с которым я решил повозиться:
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», текст заменяется старым значением. Взломать? Маленький. Но по большей части это работает.
Вместо этого вам, вероятно, понадобится список элементов, позволяющий отменить несколько нажатий клавиш, и если вы хотите пройти весь путь, вы также создадите повтор
Вместо замены текста нужно заменить выделенный текст:
richTextBox.SelectAll();
richTextBox.SelectedText = NewText;
Однако это было протестировано с текущей версией winforms, которая имеет ту же проблему.
ты имел ввиду "программно"? :)