C#字像FormatPainter

时间:2015-03-31 19:47:39

标签: c# fonts richtextbox

在Microsoft Office Word中,有一个名为Format Painter的函数,它复制文本的所有属性(Color,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;
    }

1 个答案:

答案 0 :(得分:1)

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

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;
    }

请注意,RTBRichTextBox;只涵盖了一些格式数据;还有更多:SelectionBullet, SelectionCharOffset, SelectionHangingIndent, RTB.SelectionIndent, RTB.SelectionRightIndent

另请注意,您需要在其他几个场合清除旗帜!

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