Saltar al contenido

Cómo copiar datos al portapapeles en C#

Este team redactor ha pasado horas investigando respuestas a tus búsquedas, te regalamos la respuesta así que esperamos serte de gran apoyo.

Solución:

Hay dos clases que viven en diferentes ensamblajes y diferentes espacios de nombres.

  • WinForms: use la siguiente declaración de espacio de nombres, asegúrese Main está marcado con [STAThread] attribute:

    using System.Windows.Forms;
    
  • WPF: use la siguiente declaración de espacio de nombres

    using System.Windows;
    
  • consola: añadir referencia a System.Windows.Formsuse la siguiente declaración de espacio de nombres, asegúrese de Main está marcado con [STAThread] attribute. Guía paso a paso en otra respuesta.

    using System.Windows.Forms;
    

Para copiar un exacto string (literal en este caso):

Clipboard.SetText("Hello, clipboard");

Para copiar el contenido de un cuadro de texto, use TextBox.Copy() u obtenga el texto primero y luego establezca el valor del portapapeles:

Clipboard.SetText(txtClipboard.Text);

Vea aquí un ejemplo. O… Documentación oficial de MSDN o Aquí para WPF.


Observaciones:

  • El portapapeles es un concepto de interfaz de usuario de escritorio, intentar configurarlo en el código del lado del servidor como ASP.Net solo establecerá el valor en el servidor y no tiene impacto en lo que el usuario puede ver en su navegador. Mientras que la respuesta vinculada permite ejecutar el lado del servidor del código de acceso del Portapapeles con SetApartmentState es poco probable lo que quieres lograr.

  • Si después de seguir la información en este código de pregunta todavía obtiene una excepción, consulte el error “El subproceso actual debe establecerse en apartamento de un solo subproceso (STA)” en la copia string al portapapeles

  • Esta pregunta/respuesta cubre .NET regular, para .NET Core ver – .Net Core – ¿copiar al portapapeles?

Para consola proyectos paso a paso, primero tendrá que agregar el System.Windows.Forms referencia. Los siguientes pasos funcionan en Visual Studio Community 2013 con .NET 4.5:

  1. En Explorador de la soluciónexpanda su proyecto de consola.
  2. Botón derecho del ratón Referenciasluego haga clic Añadir referencia…
  3. En el Ensambles grupo, bajo EstructuraSeleccione System.Windows.Forms.
  4. Hacer clic OK.

Luego, agrega lo siguiente using declaración con los demás en la parte superior de su código:

using System.Windows.Forms;

Luego, agregue cualquiera de los siguientes Clipboard.SetText declaraciones a su código:

Clipboard.SetText("hello");
// OR
Clipboard.SetText(helloString);

Y por ultimo agregar STAThreadAttribute para usted Main método de la siguiente manera, para evitar una System.Threading.ThreadStateException:

[STAThreadAttribute]
static void Main(string[] args)

  // ...

Mi experiencia con este problema usando WPF C# haciendo frente al portapapeles y System.Threading.ThreadStateException está aquí con mi código que funcionó correctamente con todos los navegadores:

Thread thread = new Thread(() => Clipboard.SetText("String to be copied to clipboard"));
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA
thread.Start(); 
thread.Join();

créditos a esta publicación aquí

Pero esto solo funciona en localhost, así que no intente esto en un servidor, ya que no funcionará.

En el lado del servidor, lo hice usando zeroclipboard. La única manera, después de mucha investigación.

Nos puedes corroborar nuestra función ejecutando un comentario o puntuándolo te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *