我的应用程序中的一个控件限制用户只能更改字体样式(B、I、U)和文本颜色。为此,我创建了一个从 RichTextBox 继承的自定义控件。我能够拦截 CTRL-V,并将粘贴文本的字体设置为SystemFonts.DefaultFont
. 我目前面临的问题是,如果粘贴的文本包含,例如,半粗体半常规样式 - 粗体丢失。
即“Foo Bar ”将粘贴为“Foo Bar”。
我目前唯一的想法是逐个字符地浏览文本(非常慢),然后执行以下操作:
public class MyRichTextBox : RichTextBox
{
private RichTextBox hiddenBuffer = new RichTextBox();
/// <summary>
/// This paste will strip the font size, family and alignment from the text being pasted.
/// </summary>
public void PasteUnformatted()
{
this.hiddenBuffer.Clear();
this.hiddenBuffer.Paste();
for (int x = 0; x < this.hiddenBuffer.TextLength; x++)
{
// select the next character
this.hiddenBuffer.Select(x, 1);
// Set the font family and size to default
this.hiddenBuffer.SelectionFont = new Font(SystemFonts.DefaultFont.FontFamily, SystemFonts.DefaultFont.Size, this.hiddenBuffer.SelectionFont.Style);
}
// Reset the alignment
this.hiddenBuffer.SelectionAlignment = HorizontalAlignment.Left;
base.SelectedRtf = this.hiddenBuffer.SelectedRtf;
this.hiddenBuffer.Clear();
}
}
谁能想到更清洁(更快)的解决方案?