C#:在粘贴的RichTextBox RTF,但保持颜色和格式(即:粗体,下划线等) [英] C#: Paste RTF in RichTextBox but keep coloring and formatting (i.e: bold, underline, etc)

查看:387
本文介绍了C#:在粘贴的RichTextBox RTF,但保持颜色和格式(即:粗体,下划线等)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以将文本粘贴到一个格式文本框,同时保持字体,格式文本框被用于粘贴的内容?

Is it possible to paste text into a Rich Text Box, while keeping the font being used in the Rich Text Box for the pasted content ?

在换句话说,我想从Word时格式化(即:使用的字体X和带下划线,并以蓝色文本)复制的东西,然后将其粘贴在我的RichTextBox

In other words, I'd like to copy something from Word that is formated (i.e: a text that uses a font X and is underlined and in blue), and then paste it in my RichTextBox.

我想粘贴的内容具有相同的字体作为我的RichTextBox,但保持原有的色彩和下划线。

I would like the pasted content to have the same font as that of my RichTextBox but keep its original coloring and underlining.

这种事可能吗?

我使用的WinForms。

I use winforms.

感谢

推荐答案

这是不可能的开箱。但是你可以做这样的事情:

This is not possible out of the box. But you can do something like this:

public void SpecialPaste()
{
    var helperRichTextBox = new RichTextBox();
    helperRichTextBox.Paste();
    for(int i=0;i<helperRichTextBox.TextLength;++i)
    {
        helperRichTextBox.SelectionStart = i;
        helperRichTextBox.SelectionLength = 1;
        helperRichTextBox.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily, richTextBox1.SelectionFont.Size,helperRichTextBox.SelectionFont.Style);
    }

    richTextBox1.SelectedRtf = helperRichTextBox.Rtf;
}

这改变了粘贴RTF到该字符的插入符前的字体在贴的时间位置。结果
我以为会得到问题的非常快,如果粘贴文本大(ER)。 。此外,这可以在某种程度上进行优化,它设置的字体只有一次的所有字符与汉斯·建议使用同一基本字体的行

This changes the font of the pasted RTF to that of the character preceding the caret position at the time of the paste.
I assume that will get problematic pretty fast, if the text you paste is large(er). Additionally, this can be optimized in a way, that it sets the font only once for all characters in a row with the same base font as Hans suggests.

更​​新:< BR>
这里是优化版本,即设置字体用于与相同的原始字体的连接的字符集:

Update:
Here is the optimized version, that sets the font for a connected set of characters with the same original font:

public void SpecialPaste()
{
    var helperRichTextBox = new RichTextBox();
    helperRichTextBox.Paste();
    helperRichTextBox.SelectionStart = 0;
    helperRichTextBox.SelectionLength = 1;

    Font lastFont = helperRichTextBox.SelectionFont;
    int lastFontChange = 0;
    for (int i = 0; i < helperRichTextBox.TextLength; ++i)
    {
        helperRichTextBox.SelectionStart = i;
        helperRichTextBox.SelectionLength = 1;
        if (!helperRichTextBox.SelectionFont.Equals(lastFont))
        {
            lastFont = helperRichTextBox.SelectionFont;
            helperRichTextBox.SelectionStart = lastFontChange;
            helperRichTextBox.SelectionLength = i - lastFontChange;
            helperRichTextBox.SelectionFont = new Font(richTextBox1.SelectionFont.FontFamily, richTextBox1.SelectionFont.Size, helperRichTextBox.SelectionFont.Style);
            lastFontChange = i;
        }
    }
    helperRichTextBox.SelectionStart = helperRichTextBox.TextLength-1;
    helperRichTextBox.SelectionLength = 1;
    helperRichTextBox.SelectionFont = new Font(richTextBox1.Font.FontFamily, richTextBox1.Font.Size, helperRichTextBox.SelectionFont.Style);

    richTextBox1.SelectedRtf = helperRichTextBox.Rtf;
}



这是非常丑陋的代码,我相信它可以改善和清洁。但是它做什么它应该。

It's pretty ugly code and I am sure it can be improved and cleaned. But it does what it should.

这篇关于C#:在粘贴的RichTextBox RTF,但保持颜色和格式(即:粗体,下划线等)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆