【问题标题】:Correct display of the hyperlink and the label正确显示超链接和标签
【发布时间】:2014-05-27 18:48:50
【问题描述】:

描述、代码和用户界面

我在 c#/.net 4.0 Winforms 应用程序中创建了一个 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);

RichTextBoxDetectUrls属性的默认值为true,所以我没有设置这个属性。

之后我为控件分配了一些 rtf-data,使其看起来像这样(对不起:文本是德语):--对不起,我最多可以添加 2 个链接--

导入部分为本图黄色部分:pic01

我在 rtf-data 中添加了一个链接标签。这个链接标签由一个标签(名为:Link)和指向其他东西的真实链接组成,在我的例子中是一个文件(文件:somepath)。

几乎一切都很好。该链接有效,因为添加了一个 LinkClicked-EventHandler。

我的预期:

我的预期是这样的:pic02

我定义了一个必须打印的标签(名为:链接)。链接本身必须是静默的。它不必显示在 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 中正常工作。

【问题讨论】:

  • ...如果你不能上传图片,你能链接到它,或者至少描述一下我们应该看到什么吗?
  • 我没有可公开访问的保管箱、..space 等。stackoverflow 上是否有上传区域。看照片比想象照片容易得多。我需要至少 10 个信誉才能将图片上传到 stackoverflow
  • 当我将您的 RTF 代码加载到 RTF-Box 并将其保存到一个文件中时,它看起来像 this 这就是您所期望的吗?是对还是错?
  • @TaW 这完全是错误的了望。我的期望是这样的:期望是
  • @TaW 这完全是错误的了望。我所期待的是这样的: Es werden die Ergebnisse verglichen: --> ok 链接 “链接”应该像链接一样在工作中加下划线。单击后应该调用我的事件处理程序。蓝色格式的文本: 应该是不可见的。

标签: c# winforms richtextbox rtf


【解决方案1】:

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

【讨论】:

  • 我查看了您的源代码并尝试使用它。问题是,我们有不同的策略来使用 RTB: - 您使用 richTextBoxEx.SelectedText 将文本直接放入 RTB - 我为 rtf 字符串使用单独的类,构建/附加此字符串并将其分配给属性richTextBoxEx.Rtf。这是因为我在 RTB 和超链接中也有一些其他格式的(颜色、大小、字体、..)信息。目前我不知道如何在我的实现中采用您的方法 InsertLink(strrg,string)。
  • 链接的文章至少说明了为什么您目前在 RTF 控件中遇到链接问题。那里的代码示例演示了扩展底层控件的可能性,如果您想以其他方式扩展它,它提供了一个方便的起点。顺便说一句,这不是我的代码! :) 无论如何,如果您不想采用这种方法,请尝试我即将发布的第二个答案...
  • 目前我看到了两个机会: 1. 我让我的应用程序保持原样。问题是没有油漆点。隐藏完整路径是一件好事。 2. 我使用 RTB 的代码,你给了我链接。这对我来说将是一些工作 - 因为:很高兴拥有。更改为 html 对我来说工作量太大。我不确定,我将如何决定。可能是:第 1 点。
  • Changing to html would be too much work - 你认为哪个方面工作量太大?托管查看器,或将内容组装成 HTML 而不是 RTF?我不太确定这会是很多工作。但是我不知道你的 RTF 字符串来自哪里,它是如何组装的。但如果是我,我会敲一个简单的应用程序单独试用。无论如何,在这一点上,我认为您可能必须尝试一下,然后做出选择!希望这些意见对您有所帮助。
  • 1.我的 RTF 字符串是由我自己的应用程序从自己的类生成的,其方法如下:AppendRedString(..)、AppendGreenString、AppendHyperlink。这可能是可修改的以生成 HTLM 代码。 2. 我的超链接不是指向另一个文档的链接。它是 cmd 批处理的路径名。从 DetectUrl-Eventhandler 我执行一个子进程,并执行 cmd-batch,这将比较两个文件并在第二个窗口中显示差异。该链接的行为更像是一个按钮,而不是一个简单的文档链接。拳头,我必须用一个简单的应用程序单独尝试。
【解决方案2】:

作为扩展 RTF 控制的替代方案,您是否有可能放弃 RTF?与其继续与这种可怕的技术作斗争,何不使用 HTML 呢?您可以使用WebBrowser controlthe alternatives 之一在WinForms 中显示HTML。

【讨论】:

  • 感谢您的提示。当我开始使用我的 procets 时,我决定使用richtextbox。我没有寻找其他技术。你是对的,我也可以使用 HTML 和 WebBrowser。但是,我不确定,哪个更好。 RTF 是 MS 的标准 - 是的,它有一些版本。但我曾预料到,支持 RTF 的 MS 的每个软件都能正常工作 - winform(WinAPI/C、C++、C#、Office、写字板等)、WPF、Silverlight 等,并且具有相同的输出。我的经验是:不是。
  • 继续我上面的评论:如果我使用 HTML:它是一个开放的标准,好的。但是 MS 控件能正常工作吗?免费的网络浏览器能正常工作吗?如果我更改为 html 并遇到问题有什么好处?
  • 创建一个简单的应用程序来尝试一下。您必须判断它是否满足您的需求,它在测试中是否表现良好。以及它带来的任何问题是否比您现在的问题更糟糕(恕我直言怀疑)。使用 HTML 是否可以让您在未来更轻松地更改您的应用(可能是恕我直言,因为它更易于阅读)。
猜你喜欢
  • 2013-04-19
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多