正确显示超链接和标签

时间:2014-05-27 18:48:51

标签: c# winforms richtextbox rtf

描述,代码和UI

我在c#/。net 4.0 Winforms-application中创建了一个RichTextBox(RTB)。

        this.richTextBoxProtokoll = new System.Windows.Forms.RichTextBox();

        // 
        // richTextBoxProtokoll
        // 
        this.richTextBoxProtokoll.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
        | System.Windows.Forms.AnchorStyles.Left) 
        | System.Windows.Forms.AnchorStyles.Right)));
        this.richTextBoxProtokoll.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        this.richTextBoxProtokoll.Location = new System.Drawing.Point(12, 332);
        this.richTextBoxProtokoll.Name = "richTextBoxProtokoll";
        this.richTextBoxProtokoll.Size = new System.Drawing.Size(461, 286);
        this.richTextBoxProtokoll.TabIndex = 42;
        this.richTextBoxProtokoll.Text = "";
        this.richTextBoxProtokoll.Visible = false;
        this.richTextBoxProtokoll.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.richTextBoxProtokoll_LinkClicked);

RichTextBox DetectUrls属性的默认值为true,因此我没有设置此属性。

之后我将一些rtf数据分配给控件,所以它看起来像这样(抱歉:文本是德语): - 抱歉,我最多可以添加2个链接 -

importend部分是此图片中的黄色标记部分:pic01

我在rtf-data中添加了一个link-tag。这个link-tag包含一个标签(名为:Link)和其他东西的真实链接,在我的情况下是一个文件(file:somepath)。

现在一切都很好。该链接有效,因为已添加了LinkClicked-EventHandler。

我的期望:

我所期望的是这样的:pic02

我已经定义了一个必须打印的标签(名为:Link)。链接本身必须保持沉默。它没有在RTB中显示。

如果我将RTB的rtf文本复制到一个文件并打开它,例如使用写字板,它会显示,我的期望: - 抱歉,我最多可以添加2个链接 -

这是rtf代码:

{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Verdana;}}{\colortbl;\red255\green0\blue0;\red0\green150\blue0;\red0\green0\blue250;\red0\green0\blue250}{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs16\cf0 \par {\b\cf0 Start der Dimitra-IntegrationTests}\par \cf0 27.05.2014 12:31:26\par \cf0 \par \cf0 \par \cf0 -------------------------------\par \cf0 --------- Kategorie: {\b\cf0 Adapter} \cf0 \par \cf0 -------------------------------\par \cf0 \par \cf0 \par \cf0 Es wird folgender Test ausgeführt: {\b\cf0 Test009_Wait_5_sec} \cf0 \par \cf0 \par \cf0      Es wird folgender Teil-Test ausgeführt: {\b\cf0 Teil01}\par \cf0           Es werden die Ergebnisse verglichen: {\b\cf2  --> ok    }\cf0 {\field{\*\fldinst{HYPERLINK "file:C:\\\\TS_Projekte\\\\DataAdaption\\\\Dimitra\\\\Tests\\\\IntegrationTests\\\\_Results\\\\Erich.Desktop\\\\Adapter\\\\Test009_Wait_5_sec\\\\Teil01\\\\Showdiff_TeilResults.cmd"}}{\fldrslt{\cf0\lang1033 Link}}}\cf0 \par \cf0 \par \cf0 Übersicht über die {\b\cf0 aktuelle } \cf0 Test-Serie:\par \cf0 Gesamtanzahl an Teil-Tests:  1\par \cf0 Anzahl Teil-Tests mit ok:    {\b\cf2 1}\cf0 \par \cf0 Anzahl Teil-Tests mit diffs: {\b\cf2 0}\cf0 \par }

我的问题:

  • 我的rtf代码出了什么问题。但是对于RTB来说只是错误的,对于写字板没有错误吗?
  • 它是如何正常工作的?
  • 可能是MS-RTB中的错误吗?如果是这样:是否有可用的错误修复程序?

此外:

有人告诉我,我的rtf代码可以在WPF-Richtext-Control中正常工作。

2 个答案:

答案 0 :(得分:0)

RichTextBox只是Win32 RichEdit控件的包装器,因此可以通过adding the necessary wrappers扩展其功能,以发送RichEdit控件设置链接样式所需的消息。

答案 1 :(得分:0)

作为扩展RTF控件的替代方法,您是否可以放弃RTF?而不是继续与这种坦率的可怕技术作斗争,为什么不使用HTML?您可以使用WebBrowser controlthe alternatives中的一个在WinForms中显示HTML。