2010-08-23 37 views
309

Jak mogę skopiować ciąg znaków (np. "Cześć") do Schowka systemowego w C#, więc następnym razem naciśnij CTRL + V Otrzymam "cześć"?Jak kopiować dane do schowka w C#

+4

możliwe duplikat [Jak skopiować zawartość ciąg do schowek w C#?] (http://stackoverflow.com/questions/899350/how-to-copy-the-contents-of-a-string-to-the-clipboard-in-c) –

Odpowiedz

602

Musisz deklarację przestrzeni nazw:

using System.Windows.Forms; 

lub do WPF:

using System.Windows; 

skopiować dokładny ciąg (dosłowne w tym przypadku):

Clipboard.SetText("Hello, clipboard"); 

Aby skopiuj zawartość pola tekstowego:

Clipboard.SetText(txtClipboard.Text); 

See here for an example. Lub ... Official MSDN documentation lub Here for WPF.

+11

pobili mnie do tego! +1 Klasa Clipboard znajduje się w 'System.Windows.Forms' –

+0

Dodałem przestrzeń nazw, ale nadal nie widzę klasy Clipboard. może to dlatego, że jestem konsolą usintg? – aharon

+0

tak jest! czołgi! – aharon

39
Clipboard.SetText("hello"); 

Musisz użyć System.Windows.Forms lub System.Windows nazw na to.

+0

Ta sama odpowiedź jak http://stackoverflow.com/a/3546026/206730 - Może lepiej to usuń, IMHO jest nowicjuszem z SO – Kiquenet

24

Moje doświadczenia z tym problemem przy użyciu WPF C# radzenia sobie do schowka i System.Threading.ThreadStateException, Mam kod, który działa prawidłowo ze wszystkimi przeglądarkami

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(); 

kredyty do tego postu here

ale to WORKS TYLKO NA LOCALHOST, DONT TRY TO SERWER, MOŻE TO NIE DZIAŁAĆ. na serwerze zrobiłem to za pomocą zeroclipboard. jedyny sposób, po wielu badaniach.

+0

Użyłem go w automatycznym teście Selenium (webdriver) i działa świetnie! –

+0

@ andrew.fox wypróbowałeś to na swoim serwerze - modelu klienta? ponieważ jeśli jest to 2 oddzielne maszyny, to chyba nie powinno działać. – BMaximus

+0

Lol nie, Selen otwiera okno przeglądarki na komputerze agenta. –

20

Dla projektów konsolowych krok po kroku trzeba najpierw dodać odniesienie System.Windows.Forms. Poniższe kroki działają w Visual Studio 2013 ze Wspólnoty .NET 4.5:

  1. W Rozwiązanie Explorer rozwinąć swój projekt konsoli.
  2. prawym przyciskiem myszy Referencje, a następnie kliknij Add Reference ...
  3. W Zgromadzeń grupę pod ram wybierz System.Windows.Forms.
  4. Kliknij OK.

Następnie dodaj następującą using oświadczenie z innymi w górnej części kodu:

using System.Windows.Forms; 

Następnie dodać jedną z następujących czynności Clipboard.SetText oświadczenia do kodu:

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

I wreszcie, dodaj STAThreadAttribute do sposobu Main w następujący sposób, aby uniknąć System.Threading.ThreadStateException:

[STAThreadAttribute] 
static void Main(string[] args) 
{ 
    // ... 
} 
+1

Klasa 'StackOverflowException' bezpośrednio poprzedza' STAThreadAttribute' w .NET Framework System Class Library =) –

+1

Mój Bohater, dziękuję za dodanie atrybutu! Uratował mi sporo czasu. – Rinktacular

+0

@Rinktacular Jesteś bardzo mile widziany =) Dzięki za informację zwrotną! –

Powiązane problemy