.NET RichTextBox 撤销

6

我在WinForms 3.5中使用RichTextBox,发现当我以编程方式编辑其中的文本时,这些更改将不再适用于内置的撤消功能。

有没有办法使这些更改可供撤消/重做?


你是不是想说“以编程方式”? :) - OJ.
哈哈... 是的,绝对是以编程方式意思。 - Adam Haile
2个回答

2

这是我随便搞的一些代码:

        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”,它将用旧值替换文本。有点像黑客吗?但它大部分时间都能正常工作。


1
你可能想要一个项目列表,允许多次撤销按键操作,如果你想走得更远,你也可以构建一个重做功能。 - Oskar

1

不是替换整个文本,而是要替换所选的文本:

richTextBox.SelectAll();
richTextBox.SelectedText = NewText;

然而,这已经在当前版本的winforms中进行了测试,该版本存在相同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接