2010-05-01 168 views
4

我想將文件加載到窗口froms(vs 2010)richTextBox中,但只加載文件的第一行。我使用的是:將RTF文件加載到窗口richTextBox時出現問題

 // 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) 
     { 
      // Load the contents of the file into the RichTextBox. 
      rtbTest.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText); 
     } 

我用字或墊創建的RTF文件嘗試,並試圖保存的.cs文件作爲的.rtf沒有任何成功。

請任何幫助表示讚賞。

+0

使用*真正* RTF文件。使用寫字板或Microsoft Word創建一個。 – 2010-05-01 17:13:05

+0

我嘗試過沒有快樂。 – Ted 2010-05-01 17:35:14

+0

運氣好嗎?我一直想知道你是否想過這個問題。 – 2010-05-04 08:53:10

回答

1

我不認爲cs文件是真正的rtf。嘗試,你確定了豐富的文本框大到足以顯示出比第一行多使用LoadFile超載與作爲

rtbTest.LoadFile(openFile1.FileName, RichTextBoxStreamType.PlainText); 

除此之外流類型這樣的?

編輯

我試了一下。我在vs2010中使用了windows窗體(我認爲你使用的是windows窗體,但不是100%肯定)。我創建了一個Windows窗體項目並將Project.cs保存爲rtf。我在按鈕的點擊處理程序中添加了一個按鈕和一個RichTextBox,我添加了問題中的代碼。當我加載Program.rtf時,它實際上會引發異常,因爲它的格式不正確。我添加了RichTextBoxStreamType.PlainText參數給LoadFile調用,它工作。它顯示了整個文件。

+0

嗨邁克。謝謝,它是我使用的Windows窗體。我試過這個,但不能讓它工作。我有足夠的空間。我已經嘗試在word和word pad中創建.rtf文件並將.cs文件保存爲rtf。總是得到第一條線。 – Ted 2010-05-01 17:34:02

+0

@Ted - 很抱歉聽到沒有幫助。您的應用程序是否在後臺線程中執行此操作?或其他任何可能有影響的東西?您是否嘗試過將我在編輯中描述的內容作爲一個單獨的項目來查看它是否適用於裸露的骨骼案例? – 2010-05-01 20:12:59

+0

我已經在自己的項目中獲得了它,並且結果仍然相同。我不知道。 :( – Ted 2010-05-01 23:58:54

1

你最初是如何將RTF文件保存在第一位的?我同意邁克二,該文件有東西,它不是真正的RTF。

您可能使用寫字板來驗證文件是否正確加載,這是我在使用RTF文件時使用的。

更新:

一種偵查手段,你可以嘗試是個以下:將文件加載到RichTextBox後,請檢查調試器給出了RichTextBox.Rtf財產 - 你應該看到所有的RTF文本包括格式。如果確實是「全部」,那麼你知道你正在正確地閱讀文件。

我擔心的是您正在嘗試查看保存爲RTF的代碼文件。這顯然不應該是一個問題,但是,我建議保存一個簡單的RTF文件,可能只有普通文本的兩行(想想:lorem ipsum)。如果加載好,那麼你會知道它是你的代碼文件中特定的東西,你正在閱讀,這是搞砸了。極不可能,但這是一個明顯的故障排除策略。

作爲最後的手段,嘗試在不同的機器上。

+0

嗨查理,謝謝,我試過你的建議,但沒有運氣 – Ted 2010-05-01 17:34:33

+0

這是值得一試的 – 2010-05-02 00:24:05

1

當所有其他的失敗,檢查愚蠢的東西......你有沒有設置RichTextBox控件是多行?還是設置爲單線模式?也許你是正確加載整個文件,但控制只顯示第一行,因爲這就是你告訴它:)

檢查RichTextBox.Multiline。這是一個很長的,但也許?

我創建了一個帶有停靠的RichTextBox控件的示例項目,保留了所有的默認設置(Dock = DockStyle.Fill除外),添加了一個簡單的File-> Open菜單,並將菜單中的代碼放入菜單處理程序中。我必須對代碼進行的唯一更改是將第二個LoadFile參數從RichTextBoxStreamType.PlainText更改爲RichTextBoxStreamType.RichText

一個複雜的文件從Word保存(鏈接,格式,圖形等)對我開了就好了。

另一個常見問題是控制非常短。你可能會認爲這是填補你的客戶區域,但實際上它只是一個狹窄的地帶,所以你只能看到一條高的線。你是否正確設置了尺寸,對接和/或錨定屬性?你看到文檔的滾動條嗎?它比你期望的要短嗎?

+0

爲了將來的參考,RichTextBox控件默認是nultiline,我敢肯定,你不能那麼做單線。 :) – 2010-10-16 22:02:39

0

我認爲問題與RichTextBoxStreamType有關,因爲您將其設置爲PlainText,但您希望RichText在RichTextBox控件中加載,所以爲什麼不使用RichTextBoxStreamType.RichText我試過下面的代碼,它能正常工作。

 // 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) 
     { 
      // Load the contents of the file into the RichTextBox. 
      richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.RichText); 
     } 
2

好吧,

它看起來像整個rtb.LoadFile()的事情是不工作的呀。可否請您嘗試加載文件這樣?:

using(var of = new OpenFileDialog()) 
{ 
    of.DefaultExt="*.rtf"; 
    of.Filter = "RTF Files|*.rtf"; 

    if(of.ShowDialog() == DialogResult.OK) 
      rtb.Rtf = System.IO.File.ReadAllText(of.FileName); 
} 

我希望這有助於。

0

不知道它是在WinForms的一樣,它是WPF,但在WPF你必須使用一個FlowDocument的設置在RichTextBox的文檔屬性。 這是我從WebStream閱讀代碼(同樣的事情可以爲文件流

protected static FlowDocument LoadRemoteRtf(string path) 
    { 
     var doc = new FlowDocument(); 
     if (!string.IsNullOrEmpty(path)) 
     { 
      var range = new TextRange(doc.ContentStart, doc.ContentEnd); 
      var downloader = new WebClient(); 
      Stream stream = null; 
      try 
      { 
       stream = downloader.OpenRead(path); 
       range.Load(stream, DataFormats.Rtf); 
      } 
      catch (Exception ex) 
      { 
       var props = new Dictionary<string, object> {{"URL", path}}; 
       Logging.WriteLogEntry("Failed to load remote RTF document.", ex, TraceEventType.Information, props); 
      } 
      finally 
      { 
       if (stream != null) 
       { 
        stream.Close(); 
       } 
       downloader.Dispose(); 
      } 
     } 
     return doc; 
    } 

MyRTB.Document = LoadRemoteRtf("http://myserver.com/docs/remote.rtf"); 
1

這將工作做到:

StreamReader sr = new StreamReader(sFileName, Encoding.Default, true); 
string sRtfFile = sr.ReadToEnd(); 
sr.Close(); 
rtbCombinedFile.Rtf = sRtfFile; 

sFileName是當然的RTF文件的完整路徑。 StreamReader是「System.IO」的一部分。

0

您也可以嘗試將您的RichTextBox修飾符屬性設置爲「public」並查看是否有效,並檢查WordWrap屬性是否設置爲true,即如果該文件是閱讀全部寫在1行上,只是很長的一行,即使不是,它仍然會根據您的RichTextBox的大小來包裝這些長行。

我不知道,如果你使用它已經,你試過ReSharper的?

1

剛剛看了一個文本文件轉換爲字符串,並設置在RichTextBox的RTF財產。

如果你不知道,如果你的文字中包含你可以使用這個類,我寫的RTF文本。它從原始RichTextBox繼承,並且如果內容不是RTF格式或格式錯誤,則具有後備。

public class RichTextBoxEx :RichTextBox 
{ 

    public new String Rtf 
    { 
     get 
     { 
      return base.Rtf; 
     } 
     set 
     { 

      try 
      { 
       // is this rtf? 
       if (Regex.IsMatch(value, @"^{\\rtf1")) 
       { 
        base.Rtf = value; 
       } 
       else 
       { 
        base.Text = value; 
       } 
      } 
      catch (ArgumentException) // happens if rtf content is corrupt 
      { 
       base.Text = value; 
      } 
     } 
    } 

} 
相關問題