2012-08-14 13 views
5

Clipboard.SetText("") mi genera un errore: "Il valore non può essere nullo". Quindi, come faccio a copiare una stringa vuota usando Clipboard.SetText?Copia stringa vuota utilizzando Clipboard.SetText (stringa)

Ho già effettuato Clipboard.Clear(). Cancella gli appunti, ma non mi aiuta a incollare una stringa vuota

Qualche suggerimento?

+0

Perché è necessario incollare una stringa vuota? Hai bisogno di incollare una nuova linea? – JleruOHeP

+1

Probabilmente lo stesso problema che ho avuto io: voleva mantenerlo bello e semplice senza un caso particolare quando la selezione era una stringa vuota. Sono curioso di sapere se c'è un motivo tecnico per prevenire una stringa vuota quando è consentita una stringa "normale". –

risposta

6

Se si tenta di salvare null o una stringa vuota utilizzando Clipboard.SetText, non funzionerà mai.

Vedere Clipboard.SetText Method (String) (MSDN). Viene menzionata l'eccezione ArgumentNullException se il testo è nullo o Empty per Clipboard.SetText.

Quindi non è possibile ottenere ciò che si sta cercando di raggiungere.

+4

violazione POLA se ne ho mai visto uno;) "Lanciamo un argomento * Null * Eccezione per valori non nulli" ... whut ?! –

8

penso che devi fare

Clipboard.Clear() 

Da MSDN

cancella tutti i dati dagli Appunti del sistema.

+0

Questa è una risposta più utile. –

1

Riferimento PresentationCore e chiamare System.Windows.Clipboard.SetText(string) anziché System.Windows.Forms.Clipboard.SetText(string). Ho usato clipview per verificare che System.Windows.Clipboard.SetText(""); (che non fa eccezione) memorizzi la stringa vuota negli appunti.

Questo metodo consente di evitare di dover chiamare in modo condizionale Clear() o SetText() a seconda della stringa che si sta tentando di impostare in modo efficace negli Appunti. Ciò è particolarmente utile se stai cercando di scrivere codice per impostare gli appunti su qualsiasi valore di stringa senza sapere in anticipo se la stringa vuota deve essere supportata o meno. Ad esempio, questo metodo consente di evitare di trattare la stringa vuota come un caso speciale (IMO, non dovrebbe essere un caso speciale perché è solo confuso).

Inoltre, come si può vedere con clipview, lo Clear() svuota effettivamente gli appunti anziché inserire una stringa vuota al suo interno. Chiamare System.Windows.Clipboard.SetText("") mette effettivamente un valore di stringa vuoto negli appunti. Quando si incolla, l'applicazione di destinazione può rilevare la differenza e comportarsi in modo diverso se lo desidera.

+0

Rif .: * "Reference' PresentationCore.dll' "*: O forse basta usare' PresentationCore' nella scheda ".NET" (la prima scheda)? –

+0

Quando ho provato questo, con 'System.Windows.Clipboard.SetText() ', ho ottenuto un''eccezione ** per una stringa vuota ** (come per la' Forms'), ma nessuna eccezione per una stringa non vuota. Dipende dalla versione .NET? Versioni C#? "Percorso" nel riferimento "PresentationCore" (sotto *** Riferimenti *** nel progetto C#) era: 'C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ v3.0 \ PresentationCore.dll' –

+0

@PeterMortensen Ho lo stesso percorso in Riferimenti. Sono in esecuzione Windows 10 build 15007 che afferma di avere .net-4.7 ma anche in "Attiva o disattiva le funzionalità di Windows" dice che ho .net-3.5, quindi penso che quando target .net-3.5 è in esecuzione su .net-3.5 ma probabilmente è l'ultima versione con patch. Non riesco a capire come ottenere 'System.Windows.Clipboard.SetText()' per lanciare una stringa vuota. Sei sicuro di non passarlo effettivamente 'null' invece di una stringa vuota? – binki