在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;
}
答案 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;
}
请注意,RTB
是RichTextBox
;只涵盖了一些格式数据;还有更多:SelectionBullet, SelectionCharOffset, SelectionHangingIndent, RTB.SelectionIndent, RTB.SelectionRightIndent
另请注意,您需要在其他几个场合清除旗帜!
当然,你可以用函数替换cb_paint_Click
。