2012-08-14 21 views
5

Clipboard.SetText("") wyrzuca mi błąd - "Wartość nie może być pusta". Jak skopiować pusty ciąg za pomocą Clipboard.SetText?Skopiuj pusty ciąg przy użyciu Clipboard.SetText (ciąg)

Mam już zrobione Clipboard.Clear(). Oczyść schowek, ale nie pomaga mi wkleić pusty ciąg

Jakieś sugestie?

+0

Dlaczego musisz wkleić pusty ciąg? Czy potrzebujesz wkleić nową linię? – JleruOHeP

+1

Prawdopodobnie taki sam problem jak ja: chciał zachować to ładnie i prosto bez specjalnego przypadku, gdy wybór jest pusty. Zastanawiam się, czy istnieje jakiś techniczny powód, aby uniemożliwić pusty ciąg znaków, gdy dozwolony jest "normalny" ciąg znaków. –

Odpowiedz

6

Jeśli spróbujesz zapisać wartość pustą lub pusty ciąg znaków przy użyciu Clipboard.SetText, to nigdy nie zadziała.

Zobacz Clipboard.SetText Method (String) (MSDN). Wspomniany ArgumentNullException jest generowany, jeśli tekst ma wartość null lub Empty dla Clipboard.SetText.

Dlatego nie można osiągnąć tego, co próbujesz osiągnąć.

+4

Naruszenie POLA, jeśli kiedykolwiek widziałem;) "Wyrzucamy wyjątek Argument * Null * dla wartości innych niż null" ... whut ?! –

8

myślę, że trzeba to zrobić

Clipboard.Clear() 

Od MSDN

Czyści wszelkie dane ze schowka systemowego.

+0

To jest bardziej przydatna odpowiedź. –

1

Odwołanie PresentationCore i wywołanie System.Windows.Clipboard.SetText(string) zamiast System.Windows.Forms.Clipboard.SetText(string). Użyłem clipview do sprawdzenia, czy System.Windows.Clipboard.SetText(""); (który nie zgłasza żadnego wyjątku) przechowuje pusty ciąg do schowka.

Ta metoda pozwala uniknąć warunkowego wywołania Clear() lub SetText() w zależności od tego, jaki łańcuch próbujesz skutecznie ustawić w schowku. Jest to szczególnie przydatne, jeśli próbujesz napisać kod, aby ustawić schowek na dowolnej wartości ciągu, nie wiedząc z wyprzedzeniem, czy pusty łańcuch musi być obsługiwany. Oznacza to, że ta metoda pozwala uniknąć traktowania pustego ciągu, tak jak w przypadku specjalnym (IMO, nie powinien to być przypadek szczególny, ponieważ jest to po prostu mylące).

Dodatkowo, jak widać w przypadku podglądu klipu, Clear() faktycznie opróżnia schowek, zamiast umieszczać w nim pusty ciąg znaków. Wywołanie System.Windows.Clipboard.SetText("") faktycznie powoduje umieszczenie pustej wartości ciągu w schowku. Po wklejeniu aplikacja docelowa może odróżnić i faktycznie zachowywać się inaczej, jeśli chce.

+0

Odp: * "Odniesienie" PresentationCore.dll "" *: A może po prostu użyć 'PresentationCore' na karcie" .NET "(pierwsza zakładka)? –

+0

Kiedy próbowałem tego, z 'System.Windows.Clipboard.SetText() ', otrzymałem wyjątek ** dla pustego ciągu znaków ** (jak dla' Forms'), ale bez wyjątku dla niepustego łańcucha. Czy jest on zależny od wersji .NET? Wersje C#? "Ścieżka" w odnośniku "PresentationCore" (pod *** *** References *** w projekcie C#) była: 'C: \ Program Files (x86) \ Referencje Złożenia \ Microsoft \ Framework \ v3.0 \ PresentationCore.dll' –

+0

@PeterMortensen Mam tę samą ścieżkę w Referencjach. Używam wersji systemu Windows 10 15007, która twierdzi, że ma .net-4.7, ale także pod "Włącz lub wyłącz funkcje systemu Windows". Mówi, że mam .net-3.5, więc myślę, że gdy celuję w .net-3.5, to faktycznie działa na .net-3.5, ale prawdopodobnie jest to najnowsza poprawiona wersja. Nie mogę wymyślić, jak uzyskać 'System.Windows.Clipboard.SetText()', aby rzucić na pusty ciąg. Czy na pewno nie przekazujesz go 'null' zamiast pustego ciągu? – binki