WinForms RichTextBox问题

时间:2014-07-17 19:39:59

标签: c# winforms richtextbox

我有以下代码来格式化添加到RichTextBox控件的行:

rtb.SelectionFont = new Font(new FontFamily("Microsoft Sans Serif"), 14, FontStyle.Bold);
rtb.SelectionColor = Color.SteelBlue;
rtb.SelectionAlignment = HorizontalAlignment.Center;
rtb.AppendText("This is the message to display");
rtb.AppendText(Environment.NewLine);

rtb.SelectionFont = new Font(new FontFamily("Microsoft Sans Serif"), 10, FontStyle.Regular);
rtb.SelectionColor = Color.Black;
rtb.SelectionAlignment = HorizontalAlignment.Left;
rtb.AppendText("This is the log message");

它产生以下RTF字符串:

  

{\ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang4105 {\ fonttbl {\ f0 \ fnil Microsoft   Sans Serif;} {\ f1 \ fnil \ fcharset0 Microsoft Sans Serif;}} {\ colortbl   ; \ red70 \ green130 \ blue180; \ red0 \ green0 \ blue0;}   \ viewkind4 \ uc1 \ pard \ cf1 \ b \ f0 \ fs28这是给的消息   display \ cf2 \ b0 \ fs20 \ par这是日志消息\ cf0 \ f1 \ fs17 \ par}

如果我使用RTF扩展名保存该字符串并在写字板中打开文档,我会得到预期的结果,但是在应用程序中没有应用格式。

我失踪的控件中是否有设置?

谢谢,

  

更新:修改了LarsTech建议的代码。对齐   虽然有效,但字体格式仍然没有。

     

更新:原因是代码运行的位置。包含富文本框的用户控件具有Initialize   在Load事件之前调用的函数。这是在阻止   要应用的格式。一旦我将RTF字符串保存到   局部变量并在Load事件处理程序中使用它格式化   工作正常。标记LarstTech作为答案烧烤他的评论   确实解决了对齐问题。谢谢大家。

3 个答案:

答案 0 :(得分:2)

您需要添加换行符:

rtb.AppendText("This is the message to display");
rtb.AppendText(Environment.NewLine);

并删除您的手动换行符:

//rtb.AppendText("\r\nThis is the log message");
rtb.AppendText("This is the log message");

在设置换行符后,需要在中应用SelectionAlignment。在您的代码中,换行时间太晚了。

答案 1 :(得分:0)

rtb.Rtf = //Your rtf string

或者,如果您实际加载LoadFile

,则可以使用RTF file
public void LoadMyFile()
{
   // Create an OpenFileDialog to request a file to open.
   OpenFileDialog openFile1 = new OpenFileDialog();

   // Initialize the OpenFileDialog to look for RTF files.
   openFile1.DefaultExt = "*.rtf";
   openFile1.Filter = "RTF Files|*.rtf";

   // Determine whether the user selected a file from the OpenFileDialog. 
   if(openFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
      openFile1.FileName.Length > 0) 
   {
      // Load the contents of the file into the RichTextBox.
      richTextBox1.LoadFile(openFile1.FileName);
   }
}

答案 2 :(得分:0)

保存并加载RTF文件,下面的代码必须正常工作,或者手动打开RTF文件使用@lll answer LoadMyFile()方法。

        //Save to rtf file
        rtb.SaveFile("e:\\aaaa.rtf");
        //or
        System.IO.File.WriteAllText( "e:\\aaaa.rtf",rtb.Rtf,System.Text.ASCIIEncoding.ASCII);//without BOM signature.
        // end of save to rtf


        //Load from rtf file.
        rtb.LoadFile("e:\\aaaa.rtf");
        //or
        rtb.Rtf = System.IO.File.ReadAllText("e:\\aaaa.rtf", System.Text.ASCIIEncoding.ASCII); 
        //end of load rtf from file