RichTextBox是一个支持RTF的文本框,但很多情况下我们并不希望用户采用快捷键(如CTRL+V)来粘贴有格式的内容,或者我们需要清除用户粘贴的内容的格式,怎么办呢? 其实非常简单: 去掉格式:把剪切板的字符串取出来放到一个变量中(这个过程就去掉格式了),再将变量中的值设回剪贴板,然后粘贴就ok了

private void tbClob_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.V)
            {
                IDataObject dataObj = Clipboard.GetDataObject();
                if (dataObj.GetDataPresent(DataFormats.StringFormat))
                {
                    e.Handled = true; //去掉格式文本的格式 
                    var txt = (string) Clipboard.GetData(DataFormats.StringFormat);
                    Clipboard.Clear();
                    Clipboard.SetData(DataFormats.StringFormat, txt);
                    tbClob.Paste();
                }
            }
        }

        private void tbTemplate_KeyDown(object sender, KeyEventArgs e)
        {
            //防止ctrl+v粘贴有格式的文本进来 
            if (e.Control && e.KeyCode == Keys.V)
            {
                e.Handled = true;
                //这句是关键,不然你会发现粘贴了两次 
                v.miPaste.PerformClick();
            }
        }

        private void miPaste_Click(object sender, EventArgs e)
        {
            v.tbTemplate.Paste(DataFormats.GetFormat(TextDataFormat.UnicodeText.ToString()));
        }

 

网上有很多种方式(纯粹是扩展阅读,可以不看),例如自己扩展一个RichTextBox,在其中拦截WM_PASTE消息,如下:

namespace WindowsApplication2
{
    internal class RichTextPaste : RichTextBox
    {
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            switch (m.Msg)
            {
                case 257:
                    if ((int) m.LParam == -1071841279 && (int) m.WParam == 17)
                    {
                        MessageBox.Show("Fired");
                    }
                    break;
            }
        }
    }
}

 

有用,比较复杂,还有消息判断简单的,如:

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if(m.Msg== WM_PASTE)//0x302:WM_PASTE 还有一种处理手法,就是注册本应用只接收文本类的粘贴,采用:RegisterClipboardFormat,也可以
    {
    }
}

 

采用:RegisterClipboardFormat,也可以

posted on 2012-07-21 12:13  Memory  阅读(1621)  评论(0编辑  收藏  举报