[英]RichTextBox Undo Adding Spaces
我為RichTextBox創建了自己的撤消系統,通過該系統,每當您執行某項操作時,都會將撤消操作添加到堆棧中,而當您按undo時,將撤消該操作。
此行為與我為之實現的所有控件(RichTextBoxes除外)完美配合。 我將系統簡化為最簡單的元素,每當您按Delete鍵時,它都會將當前選定的文本及其索引添加到堆棧中,而在您撤消此操作時,它將文本重新放置在該索引處。
這是去除了最簡單元素的代碼(例如文本文件的實際讀取):
// Struct I use to store undo data
public struct UndoSection
{
public string Undo;
public int Index;
public UndoSection(int index, string undo)
{
Index = index;
Undo = undo;
}
}
public partial class Form1 : Form
{
// Stack for holding Undo Data
Stack<UndoSection> UndoStack = new Stack<UndoSection>();
// If delete is pressed, add a new UndoSection, if ctrl+z is pressed, peform undo.
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Modifiers == Keys.None && e.KeyCode == Keys.Delete)
UndoStack.Push(new UndoSection(textBox1.SelectionStart, textBox1.SelectedText));
else if (e.Control && e.KeyCode == Keys.Z)
{
e.Handled = true;
UndoMenuItem_Click(textBox1, new EventArgs());
}
}
// Perform undo by setting selected text at stored index.
private void UndoMenuItem_Click(object sender, EventArgs e)
{
if (UndoStack.Count > 0)
{
// Save last selection for user
int LastStart = textBox1.SelectionStart;
int LastLength = textBox1.SelectionLength;
UndoSection Undo = UndoStack.Pop();
textBox1.Select(Undo.Index, 0);
textBox1.SelectedText = Undo.Undo;
textBox1.Select(LastStart, LastLength);
}
}
}
但是,如果僅從一行中選擇\\ n,則在下面選擇更多文本,如下所示: ,然后按Delete鍵,然后再撤消,似乎兩次撤消了該\\ n字符。
我已經設置了這段代碼,它似乎可以通過文本框和RichTextBox為您完成我想做的事情,但我無法刪除或添加多余的空間。 是否可以按照特定的操作順序嘗試重新創建您的問題?
我想我已經解決了。 當您突出顯示這樣的文本時: 您還要在我指向的最后一行的末尾添加\\ n字符。 但是,當您按Delete鍵時,實時出價實際上不會刪除此字符。 因此,當您撤消刪除操作時,您必須刪除所有尾隨\\ n字符,因為它們實際上並沒有被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.