Laden...

Bild in RichTextBox

Erstellt von kstanger vor einem Jahr Letzter Beitrag vor einem Jahr 760 Views
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr
Bild in RichTextBox

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
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

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
4.931 Beiträge seit 2008
vor einem Jahr

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.

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

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?

Karl Stanger
4.931 Beiträge seit 2008
vor einem Jahr

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)?

K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

Sorry - .NET Framework 4.8.
Ich suche jetzt mal ein paar bmp Bilder und versuche es.

Karl Stanger
K
kstanger Themenstarter:in
99 Beiträge seit 2022
vor einem Jahr

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