本文介绍: c#的富文本控件粘贴时会带着格式进来,这点有时候不是我们想要的。1. keydown事件不靠谱,按的很快的时候不一定触发。2. 默认黏贴操作无法屏蔽,会出现黏贴两次的情况。我们可以一个角度思考,就可以取巧的解决这个问题网上的一些解决方法一般是这样。监控keydown事件。

c#的富文本控件粘贴时会带着格式进来,这点有时候不是我们想要的。

网上的一些解决方法一般是这样

监控keydown事件

这有一些问题

1. keydown事件不靠谱,按的很快的时候不一定触发

2. 默认黏贴操作无法屏蔽,会出现黏贴两次的情况

/// <summary>
/// 粘贴内容时,去除源文本格式
/// </summary>
/// <param name="sender"></param>
/// &lt;param name="e"&gt;</param>
private void rtbContent_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control &amp;&amp; e.KeyCode == Keys.V)
    {
        IDataObject dataObject = Clipboard.GetDataObject();
        if (dataObject.GetDataPresent(DataFormats.StringFormat))
        {
            e.Handled = true;
            var content = (string)Clipboard.GetData(DataFormats.StringFormat);
            Clipboard.Clear();
            Clipboard.SetData(DataFormats.StringFormat, content);
            rtbContent.Paste();
        }
    }
}

————————————————
版权声明本文为CSDN博主「十四贝勒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明原文链接https://blog.csdn.net/thanks_hck/article/details/126888647

我们可以换一个角度思考,就可以取巧的解决这个问题

就是控件激活时,把粘贴板的格式信息刷掉

private void richTextBox1_MouseEnter(object sender, EventArgs e)
{
    // 鼠标进入时,清除粘贴板的格式
    IDataObject dataObj = Clipboard.GetDataObject();
    if (dataObj.GetDataPresent(DataFormats.StringFormat))
    {
        var txt = (string)Clipboard.GetData(DataFormats.StringFormat);
        Clipboard.Clear();
        Clipboard.SetData(DataFormats.StringFormat, txt);
    }
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注