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
..
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
..