Создать и скопировать гиперссылку с текстом / подписью в буфер обмена с помощью c # - PullRequest
11 голосов
/ 04 января 2011

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

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

Я пробовал все виды вещей с Clipboard.SetData, но, похоже, ничего не помогло.* (Я работаю над приложением Windows Form в VS2010, .NET4.0)

Ответы [ 2 ]

16 голосов
/ 04 января 2011

Я не знаю архитектуру, с которой вы работаете, но в любом случае вам просто нужно скопировать 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, давайте попробуем обобщить его в 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);
0 голосов
/ 15 мая 2019

В случае, если у кого-то есть такая же проблема, как у меня: Предлагаемое решение для «гиперссылки с подписью в другой программе, такой как 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...