Создание и копирование гиперссылки с текстом/заголовком в буфер обмена с помощью С#
Во всех видах программ вы можете копировать гиперссылки в буфер обмена и вставлять их в другие приложения. 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);