Создание и копирование гиперссылки с текстом/заголовком в буфер обмена с помощью С#

Во всех видах программ вы можете копировать гиперссылки в буфер обмена и вставлять их в другие приложения. E g обратная связь всегда приветствуется ссылкой внизу этой страницы, которую можно скопировать и вставить в MS Word. Я хочу создать такую ​​ссылку программно, скопировать ее в буфер обмена и затем вставить ее в другое место.

Например, ссылка на текст Стек, который сопоставляется с stackoverflow.com.

Ive пробовал всевозможные вещи с Clipboard.SetData, но ничего похожего на трюк.

(Я работаю над приложением формы Windows в VS2010,.NET4.0)

Ответ 1

Я не знаю, с какой архитектурой вы работаете, но в любом случае вам нужно просто скопировать URL-адрес в буфер обмена.

Например, если у вас есть элемент управления HyperLink с именем myHyperlink и Button с именем copyButton.

Когда пользователь нажимает кнопку, вы должны просто использовать 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, попробуйте обобщить его на С#:

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);

Ответ 2

В случае, если у кого-то есть та же проблема, что и у меня: предлагаемое решение для "гиперссылки с надписью в другой программе, такой как Word", не работает полностью, как копирование гиперссылки, потому что если вы переходите в программу, которая не поддерживает гиперссылки, вы ничего такого. Если вы скопируете гиперссылку вручную, она будет за заголовком.

Я добился этого, добавив строку с надписью в буфер обмена к решению с помощью @as-cii (это не кажется идеальным, поэтому дайте мне знать, если вы знаете лучшее решение)

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.com", "Google");
DataObject dataObject = new DataObject();
dataObject.SetText(link, TextDataFormat.Html);
dataObject.SetText("Google");
Clipboard.SetDataObject(dataObject, true);

Ответ 3

https://theartofdev.com/2014/06/12/setting-htmltext-to-clipboard-revisited/  работал лучше всего для меня.

Решает проблему, описанную @NellyFlo, а также вставляет в Skype для бизнеса.

Короче говоря:

  • include ClipboardHelper.cs
  • установить буфер обмена с помощью var text = "Google"; var link = "http://www.google.com"; ClipboardHelper.CopyToClipboard("\<a href=\"{link}\">{text}</a>", text);