【问题标题】:Getting Hyperlinks Working in Rich Text Box Using RTF使用 RTF 在富文本框中获取超链接
【发布时间】:2020-08-10 18:24:11
【问题描述】:

我正在尝试使用富文本格式格式化富文本框中的超链接。多亏了这个answer,我可以得到基本的格式,例如使文本加粗。但是,我无法使 RTF 格式的超链接正常工作。我找到了一个制作 RTF 链接here 的示例。但是,当我尝试将其放入如下所示的富文本框中时,它会导致我的应用程序崩溃。关于我在这里缺少什么的任何建议?

string my_hyperlink_text = @"{\field{\*\fldinst HYPERLINK \"http://www.google.com/\"}{\fldrslt Google}}"
        
if (rtbControl is RichTextBox & rtbControl.Name == "name_of_control")  // Making sure the control is a RichTextBox
       {
            RichTextBox rtb = rtbControl as RichTextBox;
            rtb.Rtf = my_hyperlink_text;
       }

【问题讨论】:

  • 如果您只需要单个链接(而不是其他文本),请使用 LinkLabel。否则,您可能希望为此采用 native 方式Links with arbitrary text in a RichTextBox。简单地插入一个链接可能看起来复杂,但这是您做一次,然后存储自定义控件以供将来使用的事情。此时,您正在破坏 RTF 文本,删除标题和第一段定义:您的 RTB 正在受到伤害。
  • 富文本框不支持 RTF 格式的链接吗?还是我上面的 RTF 不正确?据我所知,富文本框应该支持 RTF 格式的超链接。
  • 这对我来说不会崩溃:richTextBox1.Rtf = "{\\rtf1\field{\\*\\fldinst HYPERLINK \"http://www.google.com/\"}{\\fldrslt Google}}";
  • 虽然它不会导致应用程序崩溃,但使用上面的 RTF,富文本框会显示以下字符串:“ield[][]HYPERLINK "google.com/"[][]Google"。不完全是什么我在找。

标签: c# winforms vsto richtextbox rtf


【解决方案1】:

让 rtfs 工作的一种简单方法是用 Microsoft Word 编写您的文本,将其复制并粘贴到写字板,然后从那里将其另存为 RTF。 需要绕道使用 MS Word,因为写字板不支持在 UI 中输入链接,尽管当它们来自其他来源(如剪贴板)时,它可以正确处理它们。此外,MS Word 会创建大量臃肿的 rtf。

您以这种方式创建的 rtf 文件随后可以在任何文本编辑器中打开,并可用作程序中的字符串常量。

在您的情况下,我认为前缀和颜色表可能丢失并导致问题。

顺便说一句:写字板只不过是 Windows rtf 控件的包装,即您在代码中使用的相同控件。

【讨论】:

  • 这很酷。生成 RTF 文本模板的简单方法。唯一的问题是这样做会阻止在 LinkClicked 事件中使用 Process.Start(e.LinkText) 打开任何内容,因为 LinkText 本身必须是链接。因此,如果您使用 RTF 将“Google”显示为超链接,则 e.LinkText 将是“Google”而不是“www.google.com”我认为这可以使用全局变量来解决,也许可以存储实际链接并使用它与 Process.Start() 和 LinkClicked 事件。无论如何,我认为这通过格式化 RTF 文本回答了我的主要问题。谢谢!
  • 我不确定,但我认为我遇到了同样的问题。在我的例子中,我使用了带有链接文本和 URL 的字典,因此 rtf 本身不包含目标 url,但这些是由字典中的值决定的。
猜你喜欢
  • 1970-01-01
  • 2022-10-17
  • 2012-04-08
  • 2020-10-28
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多