566 Stimmen

Wie kopiere ich Daten in die Zwischenablage in C#?

Wie kann ich eine Zeichenfolge (z. B. "Hallo") in die System-Zwischenablage in C# kopieren, so dass das nächste Mal, wenn ich drücke CTRL+V Ich werde "Hallo" sagen?

971voto

Kieren Johnstone Punkte 40059

Es gibt zwei Klassen, die in verschiedenen Assemblies und verschiedenen Namespaces leben.

  • WinForms: Verwenden Sie folgende Namespace-Deklaration, stellen Sie sicher Main ist gekennzeichnet mit [STAThread] Attribut:

    using System.Windows.Forms;
  • WPF: Verwenden Sie folgende Namespace-Deklaration

    using System.Windows;
  • Konsole: Verweis hinzufügen auf System.Windows.Forms verwenden Sie die folgende Namespace-Deklaration und stellen Sie sicher, dass Main ist gekennzeichnet mit [STAThread] Attribut. Schritt-für-Schritt-Anleitung in einem anderen Antwort

    using System.Windows.Forms;

Zum Kopieren einer exakten Zeichenkette (in diesem Fall ein Literal):

Clipboard.SetText("Hello, clipboard");

Um den Inhalt eines Textfeldes zu kopieren, verwenden Sie entweder TextBox.Copy() oder zuerst den Text abrufen und dann den Wert für die Zwischenablage festlegen:

Clipboard.SetText(txtClipboard.Text);

Siehe hier für ein Beispiel . Oder... Offizielle MSDN-Dokumentation o Hier für WPF .


Bemerkung:

60voto

skia.heliou Punkte 1620

Para Konsole Projekte schrittweise zu erstellen, müssen Sie zunächst die System.Windows.Forms Hinweis. Die folgenden Schritte funktionieren in Visual Studio Community 2013 mit .NET 4.5:

  1. En Lösung Explorer erweitern Sie Ihr Konsolenprojekt.
  2. Klicken Sie mit der rechten Maustaste auf . Referenzen und klicken Sie dann auf Referenz hinzufügen...
  3. In der Baugruppen Gruppe, unter Rahmenwerk auswählen System.Windows.Forms .
  4. Klicken Sie auf OK .

Dann fügen Sie Folgendes hinzu using Anweisung zusammen mit den anderen Anweisungen am Anfang Ihres Codes:

using System.Windows.Forms;

Fügen Sie dann einen der folgenden Punkte hinzu Clipboard . SetText Anweisungen zu Ihrem Code hinzufügen:

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

Und zum Schluss fügen Sie STAThreadAttribute zu Ihrem Main Methode wie folgt, um eine System.Threading.ThreadStateException :

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

52voto

BMaximus Punkte 1032

Meine Erfahrung mit diesem Problem mit WPF C# Kopieren in die Zwischenablage und System.Threading.ThreadStateException ist hier mit meinem Code, der mit allen Browsern korrekt funktioniert:

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

Credits zu diesem Beitrag ici

Dies funktioniert jedoch nur auf localhost, also versuchen Sie es nicht auf einem Server, da es nicht funktionieren wird.

Auf der Serverseite habe ich das mit Hilfe von zeroclipboard . Der einzige Weg, nach einer Menge von Forschung.

43voto

Bradley Smith Punkte 13023
Clipboard.SetText("hello");

Sie müssen die System.Windows.Forms o System.Windows Namespaces für das.

11voto

QB kyu Punkte 61

Clip.exe ist eine ausführbare Datei in Windows zum Einrichten der Zwischenablage. Note dass dies nicht funktioniert für andere Betriebssysteme außer Windows, das immer noch scheiße ist.

        /// <summary>
        /// Sets clipboard to value.
        /// </summary>
        /// <param name="value">String to set the clipboard to.</param>
        public static void SetClipboard(string value)
        {
            if (value == null)
                throw new ArgumentNullException("Attempt to set clipboard with null");

            Process clipboardExecutable = new Process(); 
            clipboardExecutable.StartInfo = new ProcessStartInfo // Creates the process
            {
                RedirectStandardInput = true,
                FileName = @"clip", 
            };
            clipboardExecutable.Start();

            clipboardExecutable.StandardInput.Write(value); // CLIP uses STDIN as input.
            // When we are done writing all the string, close it so clip doesn't wait and get stuck
            clipboardExecutable.StandardInput.Close(); 

            return;
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X