2009-12-18 73 views
9

顯然,Microsoft提供的RichTextBox不完全支持RTF規範。出於某種原因,它不會允許多行內容,而是破壞格式。爲什麼richtextbox不能正確顯示此表格?

Forexample,這裏是RTF代碼來生成一個表:

\par 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl Length of Time until Replayment\cell\cell Flate Fee Percentage\cell\cell Broker and Application Fees\cell\cell Total lien on case\cell\row 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 0-6 \cell Months \cell 40% \cell\cell 310 \cell\cell\{#TOTALLIEN0-6#\}\cell\row 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 7-12 \cell Months \cell 60% \cell\cell 310 \cell\cell\{#TOTALLIEN7-12#\} \cell\row 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 13-18 \cell Months \cell 100% \cell\cell 310 \cell\cell\{#TOTALLIEN13-18#\} \cell\row 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 19-24 \cell Months \cell 150% \cell\cell 310 \cell\cell\{#TOTALLIEN19-24#\} \cell\row 
\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 25-36 \cell Months \cell 200% \cell\cell 310 \cell\cell\{#TOTALLIEN25-36#\} \cell 
\row\trowd\trgaph108\trleft36\trqc\trrh280\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 
\cellx2000\cellx4000\cellx6000\cellx6500\cellx8500\cellx9000\cellx11000 
\pard\intbl 37+ \cell Months \cell 300% \cell\cell 310 \cell\cell\{#TOTALLIEN37#\} \cell 

此,如果字和寫字板工作正常。文本太長的第一行會分成多行,但是,在Richtext框中它會有些古怪。

寫字板看起來是這樣的: wordpad RTF table http://img231.imageshack.us/img231/2720/wordpadrtf.jpg

和富文本框看起來是這樣的: richtextbox table http://img262.imageshack.us/img262/9756/richtextboxrtf.jpg

如何讓RichTextBox的正常工作?

回答

15

我找到了解決方案。很顯然,每個系統上都有不止一個RichEdit庫,而且默認爲舊版本(我認爲是4.0)。 5.0已經解決了RTF解釋的大部分問題。要獲取使用它的RichtextBox,您必須使用惰性RichTextBox,並重載CreateParams屬性。

這是我如何做的:

public partial class FullRichtextBox : RichTextBox { 
    public FullRichtextBox() :base() { 
     InitializeComponent(); 
    } 
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)] 
    static extern IntPtr LoadLibrary(string lpFileName); 

    protected override CreateParams CreateParams { 
     get { 
      CreateParams param = base.CreateParams; 
      if (LoadLibrary("msftedit.dll") != IntPtr.Zero) { 
       param.ClassName = "RICHEDIT50W"; 
      } 
      return param; 
     } 
    } 
} 
+1

這裏有另外一個,它處理的滾動條更好:http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/194f563c -205f-41a1-9582-4f03fd3a53c2/ –

+0

熱門答案,謝謝! '這次選擇* *實際上被打破了。 –

+0

Thanx的解決方案,我希望我可以投票15次到您的解決方案:) – Dabbas

相關問題