2011-08-30 75 views
7

如何覆盖Richtextbox C#应用程序中的复制/粘贴功能。 包括ctrl-c/ctrl-v并右键单击复制/粘贴。如何覆盖richtextbox中的复制和粘贴

这是WPF richtextBox。

+0

windows窗体或WPF? –

+0

for Windows Forms:http://stackoverflow.com/questions/5618162/detecting-if-paste-event-occurred-inside-a-rich-text-box for WPF see here:http:// stackoverflow .com/questions/3061475/paste-event-in-a-wpf-textbox –

+0

@Davide,WPF链接添加了一个处理程序,但它并未覆盖它。 – raym0nd

回答

17

要覆盖命令功能:

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的

- 编辑 -

实现为时已晚,这是一个WPF问题的支持。要在WPF做到这一点,你需要附加一个自定义的复制和粘贴处理程序:在使用
//doc.Editor是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) 
    { 

    } 
+0

你知道如何在WPF中做到这一点? – raym0nd

+0

@ raym0nd:我已经更新了我的代码。 –

+0

@EdiwnThe你有WPF的东西,增加了一个处理程序,但并没有覆盖主要的警察/粘贴,他们仍然被称为 – raym0nd

1

我用这个复制和粘贴处理程序? 当你有OnCopy的自定义实现和您

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

OnCopy处理它做切割时,也被称为 - 我无法找到找出方法是否被调用执行复制或剪切的方式。

4

什么车工:

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 
} 
+1

我也是,我不知道它是复制还是剪切 –