Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Richtextbox-关于撤消?_C#_.net_Wpf_Richtextbox - Fatal编程技术网

C# Richtextbox-关于撤消?

C# Richtextbox-关于撤消?,c#,.net,wpf,richtextbox,C#,.net,Wpf,Richtextbox,我需要能够检测是否触发了“撤消”,以及它是否对我的RichTextBox的内容产生了影响 如果我在RichTextBox中键入内容,然后按Ctrl+Z,windows似乎可以为我处理撤消操作。我希望能够编写代码,将被触发后立即。我一直在四处寻找,什么也找不到 提前谢谢。我想你必须这样做。我不知道有什么现成的活动适合你的需要 您可能还想看一看。 以及其他阅读。WINFORM: 您可以利用该事件并检测是否按下了Ctrl+Z: richTextBox.KeyDown += new KeyEventHa

我需要能够检测是否触发了“撤消”,以及它是否对我的
RichTextBox
的内容产生了影响

如果我在
RichTextBox
中键入内容,然后按Ctrl+Z,windows似乎可以为我处理撤消操作。我希望能够编写代码,将被触发后立即。我一直在四处寻找,什么也找不到


提前谢谢。

我想你必须这样做。我不知道有什么现成的活动适合你的需要

您可能还想看一看。

以及其他阅读。

WINFORM

您可以利用该事件并检测是否按下了Ctrl+Z:

richTextBox.KeyDown += new KeyEventHandler(richTextBox_KeyDown);

WPF

richTextBox.KeyUp += new KeyEventHandler(richTextBox_KeyUp);


如果我完全理解您的意思,您希望比较
Ctr+Z
前后的内容

那么你应该做:

在XAML文件中:

<RichTextBox PreviewKeyDown="RichTextBox_PreviewKeyDown" KeyUp="RichTextBox_KeyUp" />
然后,您将在应用程序的输出中看到RichTextBox的内容在
Ctrl+Z
之前和之后


我试过了,效果很好

从.Net 3.0开始,有一种简单的内置方式可以在执行撤消命令(以及其他命令)时获得通知:

CommandManager.RegisterClassCommandBinding(typeof(MyClass),
    new CommandBinding(ApplicationCommands.Undo, OnUndo));
只需在静态构造函数(或其他地方)中调用这行代码,并添加一个静态方法:

private static void OnUndo(object sender, ExecutedRoutedEventArgs e)
{
    //your code
}

如前所述,可以使用
CommandBindings
。我更喜欢绑定到每个
控件
,而不是绑定到特定类的所有控件。这可以通过以下方式完成:

this.richTextBox.CommandBindings.Add(
    new CommandBinding(ApplicationCommands.Undo, this.RichTextBoxUndoEvent));


private void RichTextBoxUndoEvent(object sender, ExecutedRoutedEventArgs e)
{
    e.Handled = true;
    this.richTextBox.Undo();
}

我想你不得不这么做。我不知道有什么现成的活动可以满足您的需要。@Ken我认为您应该把它推广到一个答案上来,我不知道有这么一个漂亮而明显的解决方案可以手动实现这样的功能。这样看来,
MyClass
是表单,还是仅仅
RichTextBox
?在我的例子中,它是一个派生自
RichTextBox
的类,我在其中添加了在触发撤消时应处理的代码。如果您直接在
RichTextBox
(在其他类中定义代码)上尝试同样的方法,我不确定它是否也会起作用。
CommandManager.RegisterClassCommandBinding(typeof(MyClass),
    new CommandBinding(ApplicationCommands.Undo, OnUndo));
private static void OnUndo(object sender, ExecutedRoutedEventArgs e)
{
    //your code
}
this.richTextBox.CommandBindings.Add(
    new CommandBinding(ApplicationCommands.Undo, this.RichTextBoxUndoEvent));


private void RichTextBoxUndoEvent(object sender, ExecutedRoutedEventArgs e)
{
    e.Handled = true;
    this.richTextBox.Undo();
}