Как переопределить копирование и вставку в richtextbox - PullRequest
7 голосов
/ 30 августа 2011

Как я могу переопределить функции копирования / вставки в приложении Richtextbox C #. Включая ctrl-c / ctrl-v и правый клик копировать / вставить.

Это WPF richtextBox.

Ответы [ 3 ]

18 голосов
/ 30 августа 2011

Для переопределения командных функций:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
  if (keyData == (Keys.Control | Keys.C))
  {
    //your implementation
    return true;
  } 
  else if (keyData == (Keys.Control | Keys.V))
  {
    //your implementation
    return true;
  } 
  else 
  {
    return base.ProcessCmdKey(ref msg, keyData);
  }
}

И щелчок правой кнопкой мыши не поддерживается в Winforms RichTextBox

- EDIT -

Понятно, слишком позднобыл вопрос WPF.Чтобы сделать это в WPF, вам нужно прикрепить пользовательский обработчик копирования и вставки:

DataObject.AddPastingHandler(myRichTextBox, MyPasteCommand);
DataObject.AddCopyingHandler(myRichTextBox, MyCopyCommand);

private void MyPasteCommand(object sender, DataObjectEventArgs e)
{
    //do stuff
}

private void MyCopyCommand(object sender, DataObjectEventArgs e)
{
    //do stuff
}
4 голосов
/ 16 августа 2013

А как насчет Cut при использовании обработчиков копирования и вставки?Когда у вас есть пользовательская реализация OnCopy и вы обрабатываете ее как

e.Handled = true;
e.CancelCommand();

OnCopy также вызывается при выполнении Cut - я не могу найти способ узнать, был ли вызван метод для выполнения копирования или вырезания.

2 голосов
/ 30 августа 2011

Я использовал это:
//doc. Редактором является RichtextBox

 DataObject.AddPastingHandler(doc.Editor, new DataObjectPastingEventHandler(OnPaste));
 DataObject.AddCopyingHandler(doc.Editor, new DataObjectCopyingEventHandler(OnCopy));



    private void OnPaste(object sender, DataObjectPastingEventArgs e)
    { 

    }
    private void OnCopy(object sender, DataObjectCopyingEventArgs e)
    {

    }
...