2011-01-04 26 views
10

En todo tipo de programas puede copiar hipervínculos al portapapeles y pegarlos en otras aplicaciones. E g el enlace 'feedback siempre bienvenido' en la parte inferior de esta página se puede copiar y pegar en MS Word. Quiero crear un enlace de este tipo mediante programación, copiarlo en el Portapapeles y luego poder pegarlo en otro lugar.Crear y copiar un hipervínculo con texto/título al portapapeles con C#

Por ejemplo un enlace con el texto Pila que se asigna a stackoverflow.com.

He intentado todo tipo de cosas con Clipboard.SetData pero nada parece hacer el truco.

(Estoy trabajando en una aplicación de Windows Forms en VS2010, .NET4.0)

+1

¿Puede especificar qué tipo de arquitectura de su aplicación usará? ¿Estás tratando de lograr esto en Windows Forms, en ASP.NET o en WPF? –

+0

Lo siento ... VS 2010, .NET 4.0 ... Win formulario de solicitud (no ASP, WPF) – Rapunsel

Respuesta

14

no conocer la arquitectura que está trabajando, pero en cualquier caso que acaba de copiar la URL en el portapapeles

Por ejemplo, suponiendo que tienes un control llamado HyperLinkmyHyperlink y una Button nombrado copyButton.

Cuando el usuario hace clic en el botón simplemente tiene que usar Clipboard.SetText(string) pasando al método la propiedad URL de myHyperlink.

EDITAR: Para mostrar un hipervínculo con leyenda en otro programa como Word, debe establecer el texto en una forma HTML con un encabezado particular.

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> 

Este es un ejemplo de HTML, vamos a tratar de generalizar en 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>"; 

y luego usarlo como sigue:

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

Me temo que esto no es lo que estoy buscando. Copie un enlace arbitrario en esta página y péguelo en e g Word. Tome el que está a la derecha, en 'Relacionado': 'Pegar texto desde el portapapeles usando el botón'. Cuando lo pegue en Word, se mostrará como 'Pegar texto desde el portapapeles con el botón'. Al hacer clic en él, se lo dirigirá hacia donde apunta la URL subyacente. El tipo de objeto utilizado para esto debe contener tanto algún título (el texto que se muestra) como una URL, por lo tanto, Clipboard.setText (...) no es suficiente. – Rapunsel

+0

Lo siento, no había entendido bien la pregunta. Lo que usted copia del navegador es esencialmente Html, Word lo reconoce y muestra los enlaces. Intenta esto: 'Clipboard.GetText (TextDataFormat.Html);'. Luego, en su programa, analice el Html y visualícelo de la manera que desee. –

+0

Probablemente fui algo vago, lo siento por esto. Sin embargo, el Clipboard.GetText (...) no me interesa. Puedo pegar el contenido del portapapeles en cualquier programa (presionando CTRL + V), como Word, Excel, etc. No controlaré cómo se recupera el contenido del portapapeles. La pregunta es cómo llenar el Portapapeles (del código) para que esto se pueda lograr. Digamos que quiero que la palabra 'ir' se asigne a 'google.com'. ¿Cómo introduzco eso en el portapapeles para que cuando se pegue en Word, Word entienda que debe mostrar un hipervínculo con el texto 'ir' que se asigna a 'google.com'? – Rapunsel

Cuestiones relacionadas