2009-12-18 7 views
9

Aparentemente, el RichTextBox proporcionado por Microsoft no admite completamente las especificaciones RTF. Por alguna razón, no permitirá filas de líneas múltiples y en su lugar, destruye el formato.¿Por qué el cuadro richtext no muestra esta tabla correctamente?

Porejemplo, aquí está el código RTF para generar una tabla:

\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 

Esto funciona bien si tanto de palabra como WordPad. La fila superior donde el texto es demasiado largo se divide en líneas múltiples, sin embargo, en el cuadro de texto enriquecido hace algo loco.

Wordpad es así: wordpad RTF table http://img231.imageshack.us/img231/2720/wordpadrtf.jpg

Y la caja Richtext se parece a esto: richtextbox table http://img262.imageshack.us/img262/9756/richtextboxrtf.jpg

¿Cómo puedo hacer el trabajo correctamente RichTextBox?

Respuesta

15

Encontré la solución. Evidentemente, hay más de una biblioteca RichEdit en cada sistema, y ​​la predeterminada es una versión anterior (creo que 4.0). 5.0 ha solucionado la mayoría de los problemas con la interpretación de RTF. Para obtener un RichtextBox que lo use, debe inertizar RichTextBox y sobrecargar la propiedad CreateParams.

Aquí es cómo lo hice:

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

Aquí hay otro, se maneja mejor las barras de desplazamiento: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/194f563c -205f-41a1-9582-4f03fd3a53c2/ –

+0

¡Respuesta superior, gracias! 'Select * is * realmente roto esta vez. –

+0

Gracias por la solución, me gustaría poder votar 15 veces a su solución :) – Dabbas

Cuestiones relacionadas