Один из элементов управления в моем приложении ограничивает возможности пользователя изменять только стиль шрифта (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();
}
}
Кто-нибудь может придумать более чистое (и более быстрое) решение?