Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Was macht Strg+C genau?
MoaByter
myCSharp.de - Member



Dabei seit:
Beiträge: 68
Herkunft: Berlin

Themenstarter:

Was macht Strg+C genau?

beantworten | zitieren | melden

hallo,

jetzt sagt bitte nicht: "das kopiert", denn das ist nur die halbe Wahrheit.
Beispiel:
Ich erhalte eine Mail mit formatiertem Text, also mit bold und kursiv und sowas.
Den Text markiere ich, dann Strg+C und füge das Kopierte in ein Textfeld (<textarea>...</textarea>) im Browser FF ein. Funktioniert wunderbar, aber ich möchte es mit C#-Code realisieren.

Ich versuchte

	dynamic doc = webbrowser.Document.DomDocument;
	Clipboard.SetData("html", doc.selection.createRange().htmltext);   // statt "html" habe ich auch 'DataFormats...' versucht
aber es gelingt nicht, die Zwischenablage ist über

	string str = Clipboard.GetData(DataFormats.Html) + "";
nicht auslesbar, auch mit anderen DataFormats nicht.
Wieso also funktioniert es mit Strg+C? Was genau macht Strg+C?

Hat jemand 'ne Idee? Danke!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.392

beantworten | zitieren | melden

Das wird eher an Deinem doc liegen als an Copy Paste.
Das funktioniert mit SetData und GetData mit den entsprechenden Formaten einwandfrei.
Da ist im Betriebssystem auch nicht viel Logik dahinter; ist nur ein Datenspeicher.
private Nachricht | Beiträge des Benutzers
MoaByter
myCSharp.de - Member



Dabei seit:
Beiträge: 68
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Das doc wird im Browser korrekt angezeigt, ist ganz korrektes, einfaches Html, und wenn ich es dort komplett markiere, egal ob manuell oder mit

	webbrowser.Focus();
	webbrowser.Document.ExecCommand("SelectAll", true, null);
markieren lasse und dann mit Strg+C den Text heruakopiere und dann bei FF einfüge, funktioniert es wunderbar, nur eben nicht mit

	Clipbord.SetData(...);
Meine Freundin und ich haben dazu gestern zwei recht interessante Links gefunden, auch wenn's mir noch nicht geholfen hat:

https://de.wikipedia.org/wiki/Zwischenablage
https://docs.microsoft.com/de-de/windows/win32/dataxchg/clipboard-operations#cut-and-copy-operations

So ganz wenig ist das nicht, was da passiert.

Nunja, erstmal Danke für deine Antwort, ich werd' mal weiter suchen, es geht ja auch so.
Wäre nur interessasnt zu wissen, was da alles passiert und wie.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MoaByter am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.392

beantworten | zitieren | melden

Was unter der Haube passiert, kannst Du einfach im Quellcode von .NET nachlesen.
https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Clipboard.cs

Es gibt auch stabilere Implementierungen, zB. https://github.com/CopyText/TextCopy
Zitat
So ganz wenig ist das nicht, was da passiert.
Deine Dokumentation erklärt im Endeffekt das Verhalten durch die C++ Implementierung, dass Dinge aufgeräumt und freigegeben werden müssen.
Mit den Daten selbst passiert nichts.
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.114

beantworten | zitieren | melden

Meines Wissens kann die Zwischenablage Daten in mehrerem Variationen speichern. Vielleicht setzt du die falsche?
Guck dir doch den funktionierenden Inhalt mit GetData an, dann siehst du möglicherweise den entscheidenden Unterschied zu dem was du setzt.
private Nachricht | Beiträge des Benutzers
MoaByter
myCSharp.de - Member



Dabei seit:
Beiträge: 68
Herkunft: Berlin

Themenstarter:

beantworten | zitieren | melden

Zitat von chilic
Meines Wissens kann die Zwischenablage Daten in mehrerem Variationen speichern. Vielleicht setzt du die falsche?
Guck dir doch den funktionierenden Inhalt mit GetData an, dann siehst du möglicherweise den entscheidenden Unterschied zu dem was du setzt.

Es geht nicht um das GetData(), sondern um das SetData(). Das GetData() oder wie auch immer macht dann der Firefox. Dort will ich die Daten aus der Zwischenablage in ein <textarea>-Eingabefeld einfügen.
Über Strg+C (WebBrowser) und Strg+V (Firefox) klappt das prima, es funktioniert nur nicht, wenn ich die Daten über SetData in die Zwischenablage bringe. SetData(DataFormats.Html) und SetData(DataFormats.Text) schreiben die Daten des WebBrowsers als Klartext (mit allen Html-Tags) in die Zwischenablage. In der <textarea> erscheint dann der Html-Text oder eben nur der Text, aber nicht der formatierte.
Alle anderen SetData(DataFormats...) sind nicht lesbar oder werden nicht gelesen.

Das ganze ist nicht von fundamentaler Bedeutung. Ich wollte es nur ausprobieren und dabei kam diese Frage auf.
Wie schon gesagt/geschrieben werde ich mich mal weiter informieren, ein paar Gedenkanstöße habe ich ja erhalten.

Viele Grüße - Moabyter
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Lade dir mal den Free Clipboard Viewer herunter. Damit kannst du die im Clipboard enthaltenen Formate detailiert anschauen.

Das "HTML Format" ist nicht einfach nur HTML-Text, sondern hat ein bestimmtes Format: HTML-Zwischenablageformat.
Ich habe für ein Projekt dafür den Code von ClipboardHelper.cs benutzt.
private Nachricht | Beiträge des Benutzers