问题 使用c#创建和复制带有文本/标题的超链接到剪贴板


在各种程序中,您可以将超链接复制到剪贴板并将其粘贴到其他应用程序中。例如,可以将本页底部的“反馈始终欢迎”链接复制并粘贴到MS Word中。我想以编程方式创建这样的链接,将其复制到剪贴板,然后能够将其粘贴到其他位置。

例如,带有文本的链接  映射到 stackoverflow.com

我用Clipboard.SetData尝试了各种各样的东西,但似乎没有什么可以做的。

(我正在使用VS2010中的Windows表单应用程序,.NET4.0)


2810
2018-01-04 12:11


起源

您能指定应用程序将使用哪种架构吗?您是否尝试在Windows窗体,ASP.NET或WPF中实现此目的? - as-cii
对不起... VS 2010,.NET 4.0 ... Win表单应用程序(没有ASP,WPF) - Rapunsel


答案:


我不知道你正在使用的架构,但无论如何你只需复制剪贴板中的URL。

例如,假设你有一个 HyperLink 控制命名 myHyperlink 和a Button 命名 复制按钮

当用户单击您刚要使用的按钮时 Clipboard.SetText(string) 传递给URL属性的方法 myHyperlink

编辑: 要在Word等其他程序中显示带标题的超链接,您必须使用特定标题以HTML方式设置文本。

Version:0.9
StartHTML:<<<<<<<1
EndHTML:<<<<<<<2
StartFragment:<<<<<<<3
EndFragment:<<<<<<<4
SourceURL: www.google.it
<html>
<body>
<!--StartFragment-->
<a href="http://programmers.stackexchange.com/">programmers</a></span></span>
<!--EndFragment-->
</body>
</html>

这是HTML的一个例子,让我们试着用C#来概括它:

private const string html = @"Version:0.9
StartHTML:<<<<<<<1
EndHTML:<<<<<<<2
StartFragment:<<<<<<<3
EndFragment:<<<<<<<4
SourceURL: {0}
<html>
<body>
<!--StartFragment-->
<a href='{0}'>{1}</a>
<!--EndFragment-->
</body>
</html>";

然后使用如下:

string link = String.Format(html, "http://www.google.it", "Google");
Clipboard.SetText(link, TextDataFormat.Html);

15
2018-01-04 12:24



我担心这不是我想要的。复制此页面上的任意链接并将其粘贴到Word中。在“相关”下右侧选择一个:“使用按钮从剪贴板粘贴文本”。当我将其粘贴到Word时,它将显示为“使用按钮粘贴剪贴板中的文本”。单击它时,您将被带到基础URL指向的任何位置。用于此目的的对象类型必须包含一些标题(显示的文本)和URL,因此Clipboard.setText(...)是不够的。 - Rapunsel
对不起,我不太清楚这个问题。您从浏览器复制的内容基本上是Html,Word识别它并显示链接。尝试这个: Clipboard.GetText(TextDataFormat.Html);。然后在你的程序中解析Html并以你想要的方式显示它。 - as-cii
我很可能有点模糊,对此感到抱歉。但是,Clipboard.GetText(...)对我不感兴趣。我可以将剪贴板内容粘贴到任何程序中(通过按CTRL + V),如Word,Excel等。我将无法控制如何检索剪贴板内容。问题是如何填充剪贴板(从代码),以便实现这一点。假设我想要“go”这个词映射到“google.com”。如何将其推入剪贴板,以便在粘贴到Word时,Word会理解它应显示带有“go”的超链接,该超链接映射到“google.com”? - Rapunsel
试着看看我编辑的答案现在对你有帮助。 - as-cii
确实如此。您建议的解决方案非常完美谢谢… - Rapunsel