C# .NET RichTextBox撤消
我在WinForms 3.5中使用RichTextBox,我发现当我以编程方式编辑包含的文本时,这些更改对于内置的撤消功能不再可用C# .NET RichTextBox撤消,c#,winforms,undo,C#,Winforms,Undo,我在WinForms 3.5中使用RichTextBox,我发现当我以编程方式编辑包含的文本时,这些更改对于内置的撤消功能不再可用 是否有办法使这些更改可用于撤消/重做?以下是我决定处理的一些代码: string buffer = String.Empty; string buffer2 = String.Empty; public Form3() { InitializeComponent();
是否有办法使这些更改可用于撤消/重做?以下是我决定处理的一些代码:
string buffer = String.Empty;
string buffer2 = String.Empty;
public Form3()
{
InitializeComponent();
this.richTextBox1.KeyDown += new KeyEventHandler(richTextBox1_KeyDown);
this.richTextBox1.TextChanged += new EventHandler(richTextBox1_TextChanged);
}
void richTextBox1_TextChanged(object sender, EventArgs e)
{
buffer2 = buffer;
buffer = richTextBox1.Text;
}
void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Z)
{
this.richTextBox1.Text = buffer2;
}
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.Text = "Changed";
}
基本上是我在写我自己的撤销功能。我所做的就是将旧值存储在一个缓冲区变量中,将新值存储在第二个缓冲区变量中。每次文本更改时,这些值都会更新。然后,如果用户点击“CTRL-Z”,它将用旧值替换文本。乱劈一点。但是,它在大多数情况下都有效。您需要替换选定的文本,而不是替换文本:
richTextBox.SelectAll();
richTextBox.SelectedText = NewText;
但是,这是用当前版本的winforms测试的,它也有同样的问题。您是说“以编程方式”吗?:)哈哈…是的,最明确的意思是编程你可能会想要一个项目列表,允许多个撤销键,如果你想一路走下去,你也会建立一个重做