gpt4 book ai didi

C#:无法撤消插入的文本

转载 作者:太空狗 更新时间:2023-10-29 21:47:09 25 4
gpt4 key购买 nike

我正在使用 KeyPress 事件以编程方式在自定义 RichTextBox 中添加文本:

SelectedText = e.KeyChar.ToString(); 

问题在于以这种方式插入文本不会触发 CanUndo 标志。

因此,当我尝试撤消/重做文本时(通过调用文本框的 Undo() 和 Redo() 方法),没有任何反应。

我尝试以编程方式从 TextChanged() 事件中调用 KeyUp() 事件,但仍然没有将 CanUndo 标记为 true。

如何在不为撤消和重做操作创建列表的情况下撤消插入的文本?

谢谢

最佳答案

我最终决定使用堆栈创建我自己的撤销-重做系统。

下面是我是如何做到的简要概述:

private const int InitialStackSize = 500;    
private Stack<String> undoStack = new Stack<String>(InitialStackSize);
private Stack<String> redoStack = new Stack<String>(InitialStackSize);

private void YourKeyPressEventHandler(...)
{
// The user pressed on CTRL - Z, execute an "Undo"
if (e.KeyChar == 26)
{
// Save the cursor's position
int selectionStartBackup = SelectionStart;

redoStack.Push(Text);
Text = undoStack.Pop();

// Restore the cursor's position
SelectionStart = selectionStartBackup;
}
// The user pressed on CTRL - Y, execute a "Redo"
if (e.KeyChar == 25)
{
if (redoStack.Count <= 0)
return;

// Save the cursor's position
int selectionStartBackup = SelectionStart + redoStack.ElementAt(redoStack.Count - 1).Length;

undoStack.Push(Text);
Text = redoStack.Pop();

// Restore the cursor's position
SelectionStart = selectionStartBackup;

return;
}

undoStack.Push(Text);
SelectedText = e.KeyChar.ToString();
}

关于C#:无法撤消插入的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5421795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com