c# - 如何在 C# 中撤消和重做(富文本框)

标签 c# winforms visual-studio-2012

我已经尝试在我的文本编辑器中执行 undoredo 大约 3 天了。这让我很头疼。

我有一个文本框(名为 richTextBoxPrintCtrl1),我希望能够撤消 和 *重做 *(按词)。

因此,如果我单击撤消 按钮,它撤消 最后一个词。如果我随后点击重做按钮,它重做最后一个词。

有人可以帮我解决这个问题吗?

richTextBoxPrintCtrl1.Undo(); 效果不佳。它会删除文本框中键入的所有内容。

预先感谢您的帮助。

我知道这个问题之前已经被问过很多次了,但是我无法使用我在 SO 上浏览过的问题中的信息来解决这个问题。

最佳答案

好的,我会发布一些代码来帮助您入门。首先,您需要监听 TextChanged 事件。

textBox1.TextChanged += new EventHandler(textBox1_TextChanged);

你需要在类中声明一个栈

 Stack<string> undoList = new Stack<string>();

在text changed handler中,需要将textbox的内容入栈

 void textBox1_TextChanged(object sender, EventArgs e)
    {
        undoList.Push(textBox1.Text);
    }

然后你需要处理撤消,所以你可以简单地使用 CTRL-Z

 textBox1.KeyDown += new KeyEventHandler(textBox1_KeyDown);

void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
         if(e.KeyCode == Keys.Z && (e.Control)) {
             textBox1.Text = undoList.Pop();
         }
    }

关于c# - 如何在 C# 中撤消和重做(富文本框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772602/

相关文章:

c# - 删除 asp 按钮背景?

c# - ASP.NET MVC 模型中的不可变结构

VS2012中的C++自定义内存分配链接错误

c# - SaveFileDialog 从设置的文件名中删除扩展名

c# - 自动完成并阻止新输入 - 组合框

c# - 如何在c#中将GPS时​​间从android转换为本地时间

c++ - 将多个参数传递给线程函数

c# - 使用 C# 在 Sharepoint Web 部件中使用 .net ajax 和分页时出现意外结果

c# - 在(字典)索引器上使用 C# 的 ref 特性

c# - 绑定(bind)源刷新