簡體   English   中英

RichTextBox撤消添加空間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM