C# 字如 FormatPainter

C# word like FormatPainter

Microsoft Office Word 中有一个名为格式刷的功能,它会复制文本的所有属性(颜色、FontFamily 和 FontSize)并在等待下一次选择时存储它,这是我需要的功能也为学校做作业,但我不知道该怎么做,我尝试将属性存储在变量中并在 SelectionChanged 函数中使用它们将它们粘贴到选定的文本上,但这没有用因为我需要它工作,所以我需要它像 Word 中的一样工作,但这将在 C#

的 richtextbox 中

如有任何帮助,我们将不胜感激。

我试过这样做:

private bool copiedSelection = false;

        void FormatPainter()
        {
            var fc = new FontConverter();
            Font f1 = new Font(rtxtInhoud.SelectionFont.FontFamily, rtxtInhoud.SelectionFont.Size);
            Color c1 = rtxtInhoud.SelectionColor;
            var fontAsString = fc.ConvertToInvariantString(f1); 
            Font f2 = (Font)fc.ConvertFromInvariantString(fontAsString);
            font = f2.ToString();
            kleur = c1.ToString();
            var color = Regex.Match(kleur, @"\[(.*?)\]").Groups[1];
            kleur = color.ToString();
            copiedSelection = true;
         }

private void rtxtInhoud_SelectionChanged(object sender, MouseEventArgs e)
    {
        if (copiedSelection == true && ))
        {
            rtxtInhoud.SelectionColor = ColorTranslator.FromHtml(kleur);
        }
        copiedSelection = false;
    }

这是一个简短的示例,使用两个按钮:一个用于存储一些格式数据,一个用于使用存储的格式数据绘制当前选择。

SelectionChanged事件调用第二个按钮,然后清除指示当前加载格式数据的标志。

    bool loaded = false;

    Font sFont;
    Color sColor;
    Color sBackcolor;
    float sFontSize;
    HorizontalAlignment sAlign;
    //..

    private void cb_store_Click(object sender, EventArgs e)
    {
        loaded = true;
        sFont = RTB.SelectionFont;
        sColor =   RTB.SelectionColor;
        sAlign = RTB.SelectionAlignment;
        sBackcolor = RTB.BackColor;
        sFontSize = RTB.SelectionFont.Size;
        //..
    }

    private void cb_paint_Click(object sender, EventArgs e)
    {
        RTB.SelectionFont = sFont;
        RTB.SelectionColor = sColor ;
        RTB.SelectionAlignment = sAlign;
        RTB.BackColor = sBackcolor;
        RTB.SelectionFont = new Font(sFont.FontFamily, sFontSize);
        //..
    }

    private void RTB_SelectionChanged(object sender, EventArgs e)
    {
        if (!loaded || RTB.SelectionLength <= 0) return;
        cb_paint_Click(null, null);
        loaded = false;
    }

注意RTB就是RichTextBox;仅涵盖少数格式数据;还有很多:SelectionBullet, SelectionCharOffset, SelectionHangingIndent, RTB.SelectionIndent, RTB.SelectionRightIndent

另请注意,您还需要在其他几个场合清除标志!

你当然可以用函数替换cb_paint_Click..