2009-12-18 4 views
9

Offenbar unterstützt die RichTextBox von Microsoft die RTF-Spezifikationen nicht vollständig. Aus irgendeinem Grund wird es keine Zeilen mit mehreren Zeilen zulassen und stattdessen die Formatierung zerstören.Warum zeigt die Richtextbox diese Tabelle nicht richtig an?

Forexample, hier ist der RTF-Code, um eine Tabelle zu generieren:

\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 

Dies funktioniert sowohl in Ordnung, wenn Wort und WordPad. Die obere Zeile, in der der Text zu lang ist, bricht in mehrzeilige Zeilen, in der Richtext-Box macht sie jedoch etwas verrücktes.

Wordpad sieht wie folgt aus: wordpad RTF table http://img231.imageshack.us/img231/2720/wordpadrtf.jpg

Und die Rich-Text-Feld sieht wie folgt aus: richtextbox table http://img262.imageshack.us/img262/9756/richtextboxrtf.jpg

Wie kann ich die richtextbox richtig funktioniert?

Antwort

15

Ich fand die Lösung. Offensichtlich gibt es mehr als eine RichEdit-Bibliothek auf jedem System und den Standard auf eine ältere Version (4.0 denke ich). 5.0 hat die meisten Probleme mit der RTF-Interpretation behoben. Um eine RichtextBox zu erhalten, die sie verwendet, müssen Sie RichTextBox inaktivieren und die CreateParams-Eigenschaft überladen.

Hier ist, wie ich es tat:

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

Hier ist ein weiteres, es die Bildlaufleisten besser behandelt: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/194f563c -205f-41a1-9582-4f03fd3a53c2/ –

+0

Top Antwort, danke! 'Select * ist * dieses Mal tatsächlich gebrochen. –

+0

Danke für die Lösung, ich wünschte ich kann 15 mal zu deiner Lösung abstimmen :) – Dabbas