2012-08-14 16 views
5

Clipboard.SetText("") wirft mir einen Fehler - "Wert kann nicht null sein". Also, wie kopiere ich eine leere Zeichenfolge mit Clipboard.SetText?Kopieren Sie leere Zeichenfolge mit Clipboard.SetText (Zeichenfolge)

Ich habe bereits getan Clipboard.Clear(). Es löscht die Zwischenablage, aber es hilft mir nicht, eine leere Zeichenfolge einfügen

Irgendwelche Vorschläge?

+0

Warum müssen Sie eine leere Zeichenfolge einfügen? Benötigen Sie eine neue Zeile einfügen? – JleruOHeP

+1

Wahrscheinlich das gleiche Problem wie ich: Er wollte es schön und einfach ohne einen speziellen Fall halten, wenn die Auswahl eine leere Zeichenfolge ist. Ich bin neugierig zu wissen, ob es einen technischen Grund gibt, eine leere Zeichenfolge zu verhindern, wenn eine "normale" Zeichenfolge zulässig ist. –

Antwort

6

Wenn Sie versuchen, null oder eine leere Zeichenfolge mit Clipboard.SetText zu speichern, wird es nie funktionieren.

Siehe Clipboard.SetText Method (String) (MSDN). Es wird erwähnt, dass ArgumentNullException ausgelöst wird, wenn der Text null ist, oder Empty für Clipboard.SetText.

Daher können Sie nicht erreichen, was Sie erreichen möchten.

+4

POLA-Verletzung, wenn ich jemals eine gesehen habe;) "Wir werfen eine Argument * Null * Exception für Nicht-Null-Werte" ... whut ?! –

8

Ich glaube, Sie

Clipboard.Clear() 

Von MSDN

tun müssen Löscht alle Daten aus der Zwischenablage des Systems.

+0

Das ist eine nützlichere Antwort. –

1

Referenz PresentationCore und System.Windows.Clipboard.SetText(string) statt System.Windows.Forms.Clipboard.SetText(string) anrufen. Ich habe clipview verwendet, um zu überprüfen, dass System.Windows.Clipboard.SetText(""); (die keine Ausnahme auslöst) die leere Zeichenfolge in der Zwischenablage speichert.

Mit dieser Methode ersparen Sie sich, dass Sie Clear() oder SetText() bedingt aufrufen müssen, je nachdem, welche Zeichenfolge Sie effektiv in die Zwischenablage kopieren möchten. Dies ist besonders nützlich, wenn Sie versuchen, Code zu schreiben, um die Zwischenablage auf beliebigen Zeichenfolgenwert zu setzen, ohne vorher zu wissen, ob die leere Zeichenfolge unterstützt werden muss oder nicht. Das heißt, diese Methode ermöglicht es Ihnen, die leere Zeichenfolge nicht wie einen speziellen Fall zu behandeln (IMO, es sollte kein spezieller Fall sein, weil das nur verwirrend ist).

Zusätzlich, wie mit Clipview zu sehen ist, entleert Clear() tatsächlich die Zwischenablage, anstatt eine leere Zeichenfolge darin zu platzieren. Beim Aufruf von System.Windows.Clipboard.SetText("") wird tatsächlich ein leerer Zeichenfolgenwert in die Zwischenablage kopiert. Beim Einfügen kann die Zielanwendung den Unterschied erkennen und sich tatsächlich anders verhalten, wenn sie es möchte.

+0

Re: * "Referenz' PresentationCore.dll' "*: Oder vielleicht einfach' PresentationCore' in der Registerkarte ".NET" (die erste Registerkarte)? –

+0

Wenn ich das versuchte, mit 'System.Windows.Clipboard.SetText() ', Ich habe eine ** Ausnahme für eine leere Zeichenfolge ** (wie für die 'Forms'), aber keine Ausnahme für eine nicht leere Zeichenfolge. Ist es abhängig von der .NET-Version? C# Versionen? "Path" in der Bezeichnung "PresentationCore" (unter *** Referenzen *** in dem C# -Projekt) war: 'C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.0 \ PresentationCore.dll' –

+0

@PeterMortensen Ich habe den gleichen Pfad in Referenzen. Ich habe Windows 10 Build 15007, die .net-4.7 haben behauptet, sondern auch unter „Windows-Funktionen ein- oder ausschalten“ es sagt, ich habe .net-3.5, also denke ich, wenn ich Ziel .net-3.5 er läuft auf .net-3.5, aber es ist wahrscheinlich die neueste gepatchte Version. Ich kann nicht herausfinden, wie man 'System.Windows.Clipboard.SetText()' auf eine leere Zeichenfolge wirft. Sind Sie sicher, dass Sie es nicht "null" statt einer leeren Zeichenfolge übergeben? – binki

Verwandte Themen