2013-04-23 2 views
2

Мне нужно определить, было ли вызвано «отмена» и повлияло ли это на содержимое моего RichTextBox.Richtextbox - на отмену?

I Введите содержимое в RichTextBox в мин. И нажмите Ctrl + Z, окна, кажется, обрабатывают отмену для меня. Я хочу, чтобы иметь возможность писать код, который будет запускаться сразу после этого. Я смотрю вокруг и ничего не могу найти.

Заранее спасибо.

+1

Я думаю, что вы будете иметь, чтобы [осуществить это самостоятельно] (http://wpftutorial.net/UndoRedo.html). Я не знаю о событии из коробки, которое будет отвечать вашим потребностям. – MasterMastic

+0

@ Ken Я думаю, что вы должны продвигать это до ответа, я не знал о таком отличном и очевидном решении для реализации таких функций вручную. – Clint

+0

Посмотрите это http://stackoverflow.com/questions/8667302/how-to-get-richtextbox-undo-to-work-better –

ответ

1

Winform:

Вы можете воспользоваться KeyDown событие и обнаружить, если Ctrl + Z нажата:

richTextBox.KeyDown += new KeyEventHandler(richTextBox_KeyDown); 

private void richTextBox_KeyDown(object sender, KeyEventArgs e){ 
    if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Z){ 
     //undo detected, do something 
    } 
} 

WPF:

richTextBox.KeyUp += new KeyEventHandler(richTextBox_KeyUp); 

void richTextBox_KeyUp(object sender, KeyEventArgs e) { 
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.Z) { 
     //undo detected, do something 
    } 
} 
0

Я думаю, вам нужно будет implement that yourself. Я не знаю о событии из коробки, которое будет отвечать вашим потребностям.

Возможно, вы также захотите взглянуть на Monitored Undo Framework.
И here для дополнительного чтения.

0

Если я правильно вас понимаю, вы хотите сравнить содержание до и после Ctr+Z.

Тогда вы должны сделать:

В XAML файле:

<RichTextBox PreviewKeyDown="RichTextBox_PreviewKeyDown" KeyUp="RichTextBox_KeyUp" /> 

В CS Файл:

private void RichTextBox_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.Z) 
    { 
     Console.WriteLine("After : " + new TextRange(((RichTextBox)sender).Document.ContentStart, ((RichTextBox)sender).Document.ContentEnd).Text); 
    } 
} 

private void RichTextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.Z) 
    { 
     Console.WriteLine("Before : " + new TextRange(((RichTextBox)sender).Document.ContentStart, ((RichTextBox)sender).Document.ContentEnd).Text); 
    } 
} 

Тогда вы увидите на выходе приложения содержание вашего RichTextBox до Ctrl+Z и содержимого после.

Я попробовал, и все работает отлично!

1

Начиная с .Net 3.0, есть простой встроенный способ, чтобы получить уведомление, когда команда отмены (среди других) выполняется:

CommandManager.RegisterClassCommandBinding(typeof(MyClass), 
    new CommandBinding(ApplicationCommands.Undo, OnUndo)); 

Просто позвоните эту строку кода в статическом конструкторе (или где-то еще) и добавить статический метод:

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

Итак, будет ли это 'MyClass' формой или просто« RichTextBox »? – Nyerguds

+0

В моем случае это класс, полученный из «RichTextBox», где я добавил код, который нужно обработать, если был отменен откат. Я не уверен, что это также сработает, если вы попробуете то же самое непосредственно в RichTextBox (определяя код в каком-то другом классе). – LionAM

Смежные вопросы