无法正确加载Rtf到RichTextBox

时间:2017-01-24 12:44:23

标签: c# winforms richtextbox rtf

我有一个自定义的RichTextBox,它派生自RichTextBox基类。其目的是显示格式化文本。但是,任何加载的Rtf都显示为简单文本,没有任何格式:字体,字体大小,字体样式等。

我尝试了以下代码来加载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;
    
  4. 在检查rtbEx的Rtf时,它似乎是完美的Rtf,但它显示为纯文本。

    可能是什么问题?

    更新1: 自定义RichTextBox是自定义Form中的一个控件,它将显示为TabPage。

3 个答案:

答案 0 :(得分:0)

在这种情况下你可以使用剪贴板:

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

并粘贴

 RichTextBox1.Text= Clipboard.GetText()

它对我有用..试试吧

答案 1 :(得分:0)

作为一种解决方法,我确保只有在通过捕获Form.Shown事件显示表单时才设置Rtf,如下所示:

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;
    }
}

我不知道为什么这个问题很复杂,但我希望这会有所帮助。

还有其他解决方案吗?随意评论或回答。

答案 2 :(得分:-2)

我在 winformscontrol 中的富文本框遇到了同样的问题 在对话框 (MFC) 中,rtb 应填充为 rtf,但 设置 RichTextBox.Rtf 后,从文件或剪贴板加载它都是未格式化的。 我可以通过在 OnInitDialog 中使用 Postmessage with UpdataData(FALSE) 来解决它(再次设置 RichTextBox.Rtf) 在处理程序中。好像创作还没有完成..