NoBugz( Hans Passant )によって書かれた古いコードを見つけました。これは、理解していれば、リッチテキストボックスで4.0ではなくRTF5.0を使用するように強制します。基本的には、プロパティ自体を継承してオーバーライドするクラスです。RichTextBox
CreateParams
private static IntPtr moduleHandle;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);
protected override CreateParams CreateParams
{
get
{
if (moduleHandle == IntPtr.Zero)
{
moduleHandle = LoadLibrary("msftedit.dll");
if ((long)moduleHandle < 0x20) throw new Win32Exception(Marshal.GetLastWin32Error(), "Could not load Msftedit.dll");
}
CreateParams createParams = base.CreateParams;
createParams.ClassName = "RichEdit50W";
if (this.Multiline)
{
if (((this.ScrollBars & RichTextBoxScrollBars.Horizontal) != RichTextBoxScrollBars.None) && !base.WordWrap)
{
createParams.Style |= 0x100000;
if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
{
createParams.Style |= 0x2000;
}
}
if ((this.ScrollBars & RichTextBoxScrollBars.Vertical) != RichTextBoxScrollBars.None)
{
createParams.Style |= 0x200000;
if ((this.ScrollBars & ((RichTextBoxScrollBars)0x10)) != RichTextBoxScrollBars.None)
{
createParams.Style |= 0x2000;
}
}
}
if ((BorderStyle.FixedSingle == base.BorderStyle) && ((createParams.Style & 0x800000) != 0))
{
createParams.Style &= -8388609;
createParams.ExStyle |= 0x200;
}
return createParams;
}
}
このオーバーライドを実行すると、RTFを最初の行を超えて表示できません。例えば
string rtf = @"{\rtf1\ansi\deff0{\fonttbl{\f0 Arial;}{\f1 Courier New;}}\viewkind4\uc1\pard\lang1033\f0\fs20 {\pard\f0\ul\b Activated Partial Thromboplastin Time\b0 : Collected: "
+ @"8/21/2012 4:15:00 AM\ulnon\f0\par}\par\pard\lang1033\f0\fs20 {\trowd"
+ @"\trql\trgaph100\trrh280\trleft0\intbl"
+ @"\cellx4000"
+ @"\cellx9500"
+ @"Activated Partial Thromboplastin Time\cell"
+ @"36.8 Seconds\cell"
+ @"\intbl\row}";
CustomRtb cRtb = new CustomRtb();
cRtb.Rtf = rtf;//Only the first line shows in the form...
新しい標準は、Rtfエラーの許容度がはるかに低いのでしょうか。5.0で提供されるよりきれいなテーブルフォーマットが必要です
UPDATE
変更するとデータが表示されます
+ @"\trql\trgaph100\trrh280\trleft0\intbl"
に
+ @"\trql\trgaph100\trrh280\trleft0"
さらにテストしたところ、RTFはMSWordで見栄えがすることがわかりました。実際、このコードは、次のようにMsftEditを使用してRTFを生成します。
{\*\generator Msftedit 5.41.21.2510;}
。Wordで実際のRTFを開くと、問題ないように見えます。私はこのコードを使用し、それは私が言葉で見るものとほとんど一致します。いくつかの境界線を削除する必要があります。MsfteditがRTFを生成してテーブル内でわずかに位置がずれている理由を確認するには、さらに深く掘り下げる必要があります。しかし、ええ、全体として、この質問は私がSOでできることの範囲を超えています。