none
RTF编辑框的“粘贴”事件能否由自己的程序来接管的啊? RRS feed

  • 问题

  • 我在窗体中放了一个rtf字段,我发现直接CTRL+V是可以粘贴内容的,但是我希望通过自己的程序去实现这个粘贴功能(主要是默认的粘贴效果不能满足一些特殊要求,需要我们自己定制开发),请问要怎么做呢?

    我尝试过用PreviewKeyDown事件,虽然能够让我用自定义代码去实现功能,但同时也无法阻止默认功能的执行,rtf编辑框还是自动粘贴了内容进去,和我自己处理的重复了。。。。


    da jia hao!

    2015年2月16日 4:45

答案

  • 楼主可以。尝试拦截“”:

    1)重新创建一个类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class MyRichTextBox : RichTextBox
        {
            /// <summary>
            /// 中段底层拦截,强制Ctrl+V不起作用
            /// </summary>
            protected override bool ProcessCmdKey(ref Message m, Keys keyData)
            {
    
                if (keyData==(Keys.Control | Keys.V))
                {
                    //TODO: 此处写你的自己逻辑
                    MessageBox.Show("无法处理Ctrl+V!");
                    return true;
                }
                return base.ProcessCmdKey(ref m, keyData);
            }
        }
    }

    2)重新清理并编译整个项目,直接把生成的新的RichTextBox控件拖拽到界面上即可:


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已标记为答案 liubin 2015年2月22日 11:36
    2015年2月21日 4:00
    版主

全部回复

  • 你可以抓IRichEditOleCallback::QueryAcceptData。在粘贴的时候中断默认的操作,同时加上你自己的处理代码。



    Visual C++ MVP

    2015年2月21日 3:19
    版主
  • 楼主可以。尝试拦截“”:

    1)重新创建一个类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class MyRichTextBox : RichTextBox
        {
            /// <summary>
            /// 中段底层拦截,强制Ctrl+V不起作用
            /// </summary>
            protected override bool ProcessCmdKey(ref Message m, Keys keyData)
            {
    
                if (keyData==(Keys.Control | Keys.V))
                {
                    //TODO: 此处写你的自己逻辑
                    MessageBox.Show("无法处理Ctrl+V!");
                    return true;
                }
                return base.ProcessCmdKey(ref m, keyData);
            }
        }
    }

    2)重新清理并编译整个项目,直接把生成的新的RichTextBox控件拖拽到界面上即可:


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    • 已标记为答案 liubin 2015年2月22日 11:36
    2015年2月21日 4:00
    版主