我需要我的撤消/重做代码像 Microsoft 记事本、Microsoft Word 等中的撤消/重做功能一样运行(我正在创建一个字处理器)。
目前,我的撤消和重做代码在一定程度上可以正常工作。但是我的应用程序中的撤消/重做功能存在许多问题。这些如下:
如果我键入一个句子,例如“你好,我的名字是 Toby。”,然后我撤消该文本(将 Hello 留在文档上),我最多只能重做“是”。
如果我撤消文档中的所有文本,我将无法重做任何文本。因此,如果我再次输入“你好,我的名字是 Toby。”,然后撤消该行,我将无法重做任何文本。
我希望有人可以帮助我纠正这些问题。
截至目前,Undo 和 redo 使用的代码如下:
public struct UndoSection
{
public string Undo;
public int Index;
public UndoSection(int index, string undo)
{
Index = index;
Undo = undo;
}
private void richTextBoxPrintCtrl1_TextChanged(object sender, EventArgs e)
{
{
OldLength = richTextBoxPrintCtrl1.Text.Length; System.Text.RegularExpressions.MatchCollection wordColl = System.Text.RegularExpressions.Regex.Matches(richTextBoxPrintCtrl1.Text, "'?([a-zA-z'-]+)'?");
counter.Text = wordColl.Count.ToString();
}
try
{
if (IsRedoUndo == false && (richTextBoxPrintCtrl1.Text.Substring(richTextBoxPrintCtrl1.Text.Length - 1, 1) == " " || richTextBoxPrintCtrl1.Text.Substring(richTextBoxPrintCtrl1.Text.Length - 1, 1) == ","))
{
StackCount = StackCount + 1;
RTBRedoUndo[StackCount] = richTextBoxPrintCtrl1.Text;
}
}
catch { }
}
public string[] RTBRedoUndo;
public int StackCount = 0;
public int OldLength = 0;
public int ChangeToSave = 5;
public bool IsRedoUndo = false;
public void RTBTextChanged()
{
if (richTextBoxPrintCtrl1.TextLength - OldLength >= ChangeToSave | richTextBoxPrintCtrl1.TextLength - OldLength <= ChangeToSave)
{
StackCount += 1;
RTBRedoUndo[StackCount] = richTextBoxPrintCtrl1.Text;
}
撤消代码:
public void UndoCode()
{
IsRedoUndo = true;
if (StackCount > 0 && RTBRedoUndo[StackCount - 1] != null)
{
StackCount = StackCount - 1;
richTextBoxPrintCtrl1.Text = RTBRedoUndo[StackCount];
}
}
重做代码:
public void RedoCode()
{
if (IsRedoUndo == false && richTextBoxPrintCtrl1.Text.Substring(richTextBoxPrintCtrl1.Text.Length - 1, 1) == " ")
IsRedoUndo = true;
if (StackCount > 0 && RTBRedoUndo[StackCount + 1] != null)
{
StackCount = StackCount + 1;
richTextBoxPrintCtrl1.Text = RTBRedoUndo[StackCount];
}
我不太确定要尝试什么,所以我希望有更多编程知识的人可以帮助我,因为我仍然是新手并且处于学习阶段。
谢谢 :o)