Windows Forms RichTextBox奇怪的行为

时间:2015-02-05 08:49:16

标签: c# winforms richtextbox rtf

我的日志系统生成rtf格式的字符串并将它们直接放到RichTextBox:

RichTextBox1.rtf = MyRTFFormattedString;

日志中的每一行通常都包含一些文本和链接:

{\rtf1\ansi\ansicpg1251\fs16

  {\colortbl;\red255\green0\blue0;\red0\green255\blue0;\red0\green0\blue255;\red0\green0\blue0;\red100\green100\blue100;\red255\green255\blue0;}

 {\cf5 [11:02:59] }Схема {\cf3{\field{\*\fldinst HYPERLINK "BCA-02-3202-THAP-2.01-0"}{\fldrslt  BCA-02-3202-THAP-2.01-0}}} успешно экспортирована в файл {\cf3{\field{\*\fldinst HYPERLINK "H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf"}{\fldrslt  H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf}}}\par
  {\cf5 [11:03:00] }Схема {\cf3{\field{\*\fldinst HYPERLINK "BCA-02-3202-THAP-2.02-0"}{\fldrslt  BCA-02-3202-THAP-2.02-0}}} успешно экспортирована в файл {\cf3{\field{\*\fldinst HYPERLINK "H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf"}{\fldrslt  H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf}}}\par
  {\cf5 [11:03:02] }Схема {\cf3{\field{\*\fldinst HYPERLINK "BCA-02-3202-THAP-2.03-0"}{\fldrslt  BCA-02-3202-THAP-2.03-0}}} успешно экспортирована в файл {\cf3{\field{\*\fldinst HYPERLINK "H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf"}{\fldrslt  H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf}}}\par
  {\cf5 [11:03:03] }Схема {\cf3{\field{\*\fldinst HYPERLINK "BCA-02-3202-THAP-2.04-0"}{\fldrslt  BCA-02-3202-THAP-2.04-0}}} успешно экспортирована в файл {\cf3{\field{\*\fldinst HYPERLINK "H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf"}{\fldrslt  H:\\tmp\\PID\\Draft\\pdf\\THAP\\3202\\01112013-!-3202-THAP-!-0-0.pdf}}}\par
  \par
  \par
  \par
  \par
  {\cf5 ОТЧЕТ ОБ ЭКСПОРТЕ}\par
  {\cf5 ===============================================================}\par
  {\cf3 Процесс успешно завершен}\par
  \par
  Экспортировано: 4 схем из 4 за 00:00:07.60\par
}

将此字符串放入RichTextBox后,一切看起来都很不错: RichTextBox Content

问题是通过在日志中的最后2-3行中链接链接来生成LinkClicked个事件。这样的"死"行数取决于日志中的总行数(例如4行 - 1行,10行 - 3行等)。

所有行都具有相同的rtf语法 在写字板中打开文档时,所有行中的所有链接都正常工作 将最后一行移动到日志中的第一个位置会使该行中的链接正常工作。

如何解决这个问题?
也许RichTextBox中的超链接计数有一些限制?

1 个答案:

答案 0 :(得分:0)

尝试使用RichTextBox v5:

public class RichText50W : RichTextBox
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
    static extern IntPtr LoadLibrary(string lpFileName);
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams prams = base.CreateParams;
            if (LoadLibrary("msftedit.dll") != IntPtr.Zero)
            {
                prams.ClassName = "RICHEDIT50W";
            }
            return prams;
        }
    }
}