2017-01-24 5 views
0

У меня есть собственный RichTextBox, который происходит из базового класса RichTextBox. Его цель - отобразить форматированный текст. Однако любой загруженный Rtf отображается как простой текст без форматирования: шрифт, размер шрифта, стиль шрифта и т. Д.Неспособность правильно загрузить Rtf в RichTextBox

Я попытался выполнить следующий код для загрузки Rtf: (Примечание: rtbEx - это расширенный элемент управления richtextbox; RTF является строка, содержащая в .rtf)

  1. Использование файла потока:

    FileStream tempFile = File.Open(@"C:\RTF.rtf", FileMode.Open); 
    tempFile.Position = 0; 
    rtbEx.LoadFile(tempFile, RichTextBoxStreamType.RichText); 
    tempFile.Close(); 
    
  2. Загрузка из указанного пути:

    rtbEx.LoadFile(@"C:\Users\Wilbur Omae\Desktop\RTF.rtf", RichTextBoxStreamType.RichText); 
    
  3. Непосредственно установка в .rtf:

    rtbEx.Rtf = RTF; 
    

На проверку в .rtf в rtbEx, кажется, быть совершенным Rtf, но она отображается в виде обычного текста.

В чем может быть проблема?

Обновление 1: Пользовательский RichTextBox - это элемент управления в пределах настраиваемого Form, который он будет отображать как вкладку.

+1

Это странно. Когда я использую в качестве стандартного класса richtextbox и загружаю в RTF-файл с некоторым блочным текстом, у меня нет проблем с отображением форматирования. Не могли бы вы предоставить RTF-файл и пользовательский класс? –

+0

@DanGardner Вот RTF:. '{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1033 {\ fonttbl {\ f0 \ fnil \ fcharset0 Microsoft Sans Serif;} {\ f1 \ fnil \ fcharset0 Palatino Linotype;}} \ viewkind4 \ uc1 \ pard \ f0 \ FS17 \ п по \ п LoremIpsumDolor \ номинальной LoremIpsumDolor \ номинальной \ номинальной \ пар \ Ъ \ FS16 Lorem \ я Ipsum \ уль Dolor \ fs56 LoremIpsumDolor \ ulnone \ b0 \ i0 \ f1 \ FS30 \ номинальной } '. . Wordpad распознает и корректно открывает RTF-файл. Однако, когда я заменяю свой собственный RichTextBox на стандартный, форматирование все еще потеряно. Есть ли что-то еще, что может помешать правильному рендерингу Rtf? –

+0

@WilburOmea Это интересно, поэтому, используя стандартный «richtextbox», вы все еще не видите форматирование? В моем маленьком примере, используя свой код на моей машине, он отображает прекрасный [см. Мой захват экрана здесь] (http://pasteboard.co/2AMYgXbg0.png) –

ответ

0

вы можете использовать буфер обмена в этом случае:

Clipboard.SetText(RichTextBox1.Rtf, TextDataFormat.Rtf); 

и вставить его

RichTextBox1.Text= Clipboard.GetText() 

Это работает для меня .. попробовать

+0

Это оставляет RichTextBox пустым. Однако использование перегруженного 'Clipboard.GetText (TextDataFormat.Rtf)' отображает Rtf как обычный текст. Установка 'RichTextBox1.Rtf = Clipboard.GetText (TextDataFormat.Rtf)' отображает простой текст, что является моей проблемой. –

0

В качестве обходного пути, я гарантировало Rtf был устанавливают только тогда, когда форма была показана путем улавливания события Form.Shown, как показано ниже:

public class SermonReader : Form 
{ 
    public RichTextBoxEx rtbEx= new RichTextBoxEx(); 
    private string RTF = ""; 

    public SermonReader(string rtf) 
    { 
     RTF = rtf; 

     Shown += new EventHandler(ehFormShown); 
     FormBorderStyle = FormBorderStyle.None; 
     TopLevel = false; 

     Controls.Add(rtbEx); 

     rtbEx.Dock = DockStyle.Fill; 
    } 
    private void ehFormShown(object sender, EventArgs e) 
    { 
     rtbEx.Rtf = RTF; 
    } 
} 

Я не знаю, почему проблема такая сложная, но я надеюсь, что это поможет.

Любое другое решение? Не стесняйтесь комментировать или отвечать.

Смежные вопросы