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
Bild in RichTextBox
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

Bild in RichTextBox

beantworten | zitieren | melden

Hallo,

Ich habe in Word eine RTF-Datei mit einem Bild erstellt und wollte dieses in einer RichTextBox darstellen. Die RichtTextBox ignoriert das Bild und stellt nur den Text dar.
Ich habe den Artikel "Insert Plain Text and Images into RichTextBox at Runtime" gelesen, wollte es aber erst einmal mit dem Clipboard versuchen:


Clipboard.SetImage(Image.FromFile("NeoPixel.jpg"));
DataFormats.Format myFormat = DataFormats.GetFormat(DataFormats.Bitmap);
if (RichTextBoxAufbauanleitung.CanPaste(myFormat))
{
      RichTextBoxAufbauanleitung.Paste(myFormat);
}
else
{
      MessageBox.Show("Datenformat funktioniert nicht.");
}
Dachte ich, das mag vielleicht am jpg-Format liegen; habe also das Bild in eine Bitmap umgewandelt. Aber auch mit NeoPixel.bmp funktioniert es nicht.
Es ist immer die Paste-Methode die nicht funktioniert.

Hat jemand eine Idee, was da falsch ist?
Karl Stanger
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Sieht so aus, als hätte niemand bisher eine Idee, wie das zu machen ist.
Ich habe inzwischen eine Möglichkeit gefunden, ein Bild in einer RichTextBox darzustellen:


PictureBox NeoPixel = new PictureBox();
NeoPixel.SizeMode = PictureBoxSizeMode.StretchImage;
Bitmap ImageNeoPixel = new Bitmap("NeoPixel.jpg");
NeoPixel.ClientSize = new Size(400,254);
NeoPixel.Image = ImageNeoPixel;
RichTextBoxAufbauanleitung.Controls.Add(NeoPixel);
Damit befindet sich das Bild in der linken oberen Ecke.
Wenn ich jetzt aber einen Text hinzufüge, dann wird der Text hinter das Bild geschrieben, d.h. er startet auch in der linken oberen Ecke.
Wie kann ich die PictureBox an eine beliebige Stelle in der RichTextBox positionieren? Wie kann ich Text um das Bild herumfließen lassen?
Ich glaube zu verstehen, dass durch das Controls.Add die PictureBox genau so ein Kind-Element ist wie der RTF-Text, also parallel zu ihm ist. Ich meine, dass ich die PictureBox nicht an die RichtTextBox, sondern an den RTF-Text anbinden muss.
Wie kann man das machen?
Karl Stanger
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.594

beantworten | zitieren | melden

Welche .NET Version verwendest du?

In einem Testprojekt mit .NET Framework 4 kann ich problemlos eine BMP-Datei in eine RichTextBox einfügen.

Dein Ansatz mit der PictureBox, wie du schon erkannt hast, kann so nicht funktionieren, da das RTF-Control so nichts über dieses Control weiß und somit den Text auch nicht herumfließen lassen kann.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Ich verwende .NET Framework 8. Wäre mal interessant, ob es da Unterschiede zu 4 gibt.
Wäre auch interessant, wie du das BMP eingefügt hast. Vielleicht habe ich da einen Fehler?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von kstanger am .
Karl Stanger
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.594

beantworten | zitieren | melden

Du meinst .NET Framework 4.8? Ich wollte nur wissen, ob es nicht doch das neuere .NET 5 / 6 oder 7 ist.

Ich habe sowohl per Code, d.h. Paste als auch manuell über "Strg+V" das im Clipboard gespeicherte BMP-Bild in die RichTextBox einfügen können.
Kannst du es denn zur Laufzeit manuell über "Strg+V" bzw. das Kontextmenü "Einfügen" hinzufügen (oder ist es ausgegraut)?
Hast du es mal mit einer anderen BMP-Datei probiert (evtl. ist deine "NeoPixel.bmp" in einem nicht-kompatiblen Format)?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Sorry - .NET Framework 4.8.
Ich suche jetzt mal ein paar bmp Bilder und versuche es.
Karl Stanger
private Nachricht | Beiträge des Benutzers
kstanger
myCSharp.de - Member



Dabei seit:
Beiträge: 96

Themenstarter:

beantworten | zitieren | melden

Es funktioniert!
Ich hatte einen saublöden Fehler gemacht: ich hatte die RichTextBox auf Readonly gesetzt, damit kein User da was ändern kann. Damit konnte aber auch nichts vom Clipboard per Code kopiert werden.
Die Lösung ist dann einfach: zuerst das Bild einfügen, dann auf Readonly setzen.

Dein Tipp war aber entscheidend: (oder ist es ausgegraut)

Jetzt kommt der nächste Schritt: das Bild in den Textfluss einbauen...
Karl Stanger
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.594

beantworten | zitieren | melden

Manchmal kann es so einfach sein...
private Nachricht | Beiträge des Benutzers