2012-08-14 24 views
5

Clipboard.SetText("") me arroja un error - "El valor no puede ser nulo". Entonces, ¿cómo copio una cadena vacía usando Clipboard.SetText?Copie la cadena vacía usando Clipboard.SetText (cadena)

Ya he hecho Clipboard.Clear(). Borra el portapapeles, pero no me ayuda a pegar una cadena vacía

¿Alguna sugerencia?

+0

¿Por qué necesita pegar una cadena vacía? ¿Necesita pegar nueva línea? – JleruOHeP

+1

Probablemente el mismo problema que yo: quería mantenerlo simple y agradable sin un caso especial cuando la selección es una cadena vacía. Tengo curiosidad por saber si hay una razón técnica para evitar una cadena vacía cuando se permite una cadena "normal". –

Respuesta

6

Si intentas guardar una cadena vacía o nula usando Clipboard.SetText, nunca funcionará.

Ver Clipboard.SetText Method (String) (MSDN). Se menciona que ArgumentNullException se lanza si el texto es nulo o Empty para Clipboard.SetText.

Por lo tanto, no puede lograr lo que está tratando de lograr.

+4

violación de POLA si alguna vez he visto una;) "Lanzamos una Excepción de Argumento * Nula * para valores no nulos" ... ¿y? –

8

creo que hay que hacer

Clipboard.Clear() 

De MSDN

borra todos los datos desde el portapapeles del sistema.

+0

Esa es una respuesta más útil. –

1

Referencia PresentationCore y llame al System.Windows.Clipboard.SetText(string) en lugar de System.Windows.Forms.Clipboard.SetText(string). Usé clipview para verificar que System.Windows.Clipboard.SetText(""); (que no arroja ninguna excepción) almacena la cadena vacía en el portapapeles.

Este método le evita tener que llamar condicionalmente al Clear() o SetText(), dependiendo de la cadena que intente establecer efectivamente en el portapapeles. Esto es especialmente útil si intenta escribir código para configurar el portapapeles en con cualquier valor de cadena sin saber de antemano si la cadena vacía necesita o no soporte. Es decir, este método le permite evitar tratar la cadena vacía como un caso especial (OMI, no debería ser un caso especial porque eso es simplemente confuso).

Además, como se puede ver con clipview, Clear() en realidad vacía el portapapeles en lugar de colocar una cadena vacía en él. Llamar al System.Windows.Clipboard.SetText("") realmente pone un valor de cadena vacío en el portapapeles. Cuando pega, la aplicación de destino puede notar la diferencia y realmente se comporta de manera diferente si así lo desea.

+0

Re: * "Referencia' PresentationCore.dll' "*: ¿O tal vez solo use' PresentationCore' en la pestaña ".NET" (la primera pestaña)? –

+0

Cuando probé esto, con 'System.Windows.Clipboard.SetText() ', obtuve una ** excepción para una cadena vacía ** (como para la cadena' Forms'), pero no una excepción para una cadena no vacía. ¿Depende de la versión de .NET? ¿Versiones de C#? "Ruta" en la referencia "PresentationCore" (en *** Referencias *** en el proyecto C#) fue: 'C: \ Archivos de programa (x86) \ Assemblies de referencia \ Microsoft \ Framework \ v3.0 \ PresentationCore.dll' –

+0

@PeterMortensen Tengo la misma ruta en Referencias. Estoy ejecutando Windows 10 compilación 15007 que dice tener .net-4.7 pero también en "Activar o desactivar las características de Windows", dice que tengo .net-3.5, así que creo que cuando apunte a .net-3.5 en realidad se está ejecutando en .net-3.5 pero es probablemente la última versión parcheada. No puedo entender cómo hacer que 'System.Windows.Clipboard.SetText()' arroje una cadena vacía. ¿Estás seguro de que en realidad no lo estás pasando 'null' en lugar de una cadena vacía? – binki

Cuestiones relacionadas