string durchsuchen, statt bestimmten Zeichensatz Bild in richTextBox einfügen

Fridulin

Erfahrenes Mitglied
Hallo,

hat jemand eine Idee, wie man einen String am besten bearbeitet so das :-), :), :d, :D, ;-), ;-) heraus gesucht werden. Ich möchte nachher satt eins der Zeichensätze ein Bild in einer RichTexBox einfügen. Meine Idee wäre mit IndexOf den string zu durchsuchen.

Code:
	int anfang2 = nachricht.IndexOf(":-)");
	int ende = anfang2 + 4;
						
	string vorn_bild = nachricht.Substring(0, anfang2);
	string nachn_bild = nachricht.Substring(ende);

Nun hab ich den Text vor dem Bild und dann füge ich das Bild ein und dann der Text, der dahinter kommt.

Code:
......
rtb.SelectedText = vorn_bild;
      	if(rtb.CanPaste(meinFormat))
	{
		rtb.Paste(meinFormat);
	}

	else
	{
		rtb.SelectedText += "Fehler, Bilder können nicht dargestellt werden";
	}
			
			
rtb.SelectedText = nachn_bild;
....

Nun hab ich allerdings folgendes Problem, er sucht immer nur nach einem Zeichensatz (dem Ersten). Ich möchte das aber gerne das z.B. „Das ist :-) mein Text :-) :-) :D) und so weiter“ jedes mal ein spezielles Bild eingefügt wird.

Hat jemand eine Idee wie man das am besten machen kann?

Viele Grüße und vielen Dank im voraus.
Fridulin
 
Code:
RichTextBox rtb = new RichTextBox();
rtb.Text = "hallo :D na wie gehts. Mit gehts gut :-) und dir :)";

Dictionary<string, string> meineSmiley = new Dictionary<string, string>();
meineSmiley.Add(":-)", "Bild oder so");
meineSmiley.Add(":)", "Bild2");
meineSmiley.Add(":D", "Bild3");
meineSmiley.Add(":d", "Bild4");

foreach (string smiley in meineSmiley.Keys)
    rtb.Rtf = rtb.Rtf.Replace(smiley, meineSmiley[smiley]);

Einfach die Replace funktion der Strings benutzen.

Obs mit nem Bild klappt keine Ahnung, wusste bisher nicht mal das eine normale RichtTextBox in der Lage ist Bilder anzuzeigen :rolleyes:
Aber im Prinzip ist das ja eh wieder blos nen RTF Text
 
Hallo,

vielen Dank für die Antwort.

Ja die ist in der Lage z.B. über die Copy & Past Funktion.

Der Programmtext wäre genau das richtige für mich. Jedoch funktioniert das leider nicht. Da man anscheinend mit den Programmtext ein Text durch einen anderen Text ersetzen kann. Allerdings muß das bild mit „rtb.Paste(meinFormat)“ in die rtb eingefügt werden.

Code:
Bitmap bild = new Bitmap("c:\\test\\test1.jpg");
			
Clipboard.SetDataObject(bild);
DataFormats.Format meinFormat = DataFormats.GetFormat (DataFormats.Bitmap);
rtb.Paste(meinFormat)

Danach wird das Bild immer an der aktuellen Postion eingefügt. Allerdings habe ich ja einen ganzen String und das bedeutet ich muß merken an welcher stelle das Bild eingefügt werden muß. Deswegen habe ich einmal bild_vorher und bild_nachher. Dazwischen wird dann das Bild eingefügt.

Viele Grüße
Fridulin
 
Ja das Problem kenn ich... Da hilft dir replace dann nichtmehr weiter weil es einfach nur eine ersetzung nach regex ist... Dann müsstest du wirklich mit indexOf arbeiten und die entsprechnenden Zeichen löschen + Paste. Aber da gibts es doch sicher noch eine elegantere Methode.

Kann mir schlecht vorstellen das .net da nichts passendes anbietet ^^
 
Hallo,

vielen Dank für die Antwort.

Ja die Methode ist wirklich nicht die schönste, deswegen wollte ich sie auch ungern machen. Falls also noch jemand eine andere Idee hat würde ich mich sehr freuen.

Viele Grüße und einen schönen Abend wünsche ich,
Fridulin
 
Hallo,

danke für die Antwort.

Den RTF Code ermitteln? Ich bin mir nicht sicher ob ich das richtig verstanden habe. Rein Theoretisch müßte ich das Bild als Zeichensatz in einer RTB anzeigen lassen um den Zeichensatz zu ermitteln und dann, wenn jemand :-) schreibt einfach den einfügen? Aber dann wären das ja immer noch keine Bilder.
Ich füge die Bilder ja einfach über der Copy Past Funktion ein.

Ich habe es schon mit IndexOf Probiert und da bekomme ich das einfach immer nur hin, daß er das erste Bild nimmt und keine weiteren. Wenn ich die durchsuche Funktion nochmal wieder aufrufe und er findet ein Bildzeichensatz, fügt er immer nur das erste Bild wonach ich mich IndexOf suche wieder ein. Dazwischen gibt er denn die zu suchende Zeichensätze wieder aus.

Ich brauche etwas wo er eins von den Zeichen sucht in den String und sobald er eins gefunden hat, gibt er es aus bzw. fügt eine Funktion aus (da auch noch Farbe mit SelectionColor ec. Gesetzt werden muß), danach sucht er wieder den String durch und gibt dann wieder das erste das er findet aus. Natürlich wird das erste was schon ausgegeben wurde, aus den String entfernt.

Viele Grüße
Fridulin

Edit: Also ich muß etwas finden wo er den ganzen String durchsucht, aber immer nur den kleinsten IndexOf aller Bilder (also welches Bild zuerst kommt) weiter bearbeitet bzw. dort das Bild einfügt. Danach einfach wieder normal die Funktion durchsuchen ausführen. Aber wie bekomme ich das hin, gibt es irgendwie eine int compare Funktion. Oder kann ich einfach alle IndexeOf in ein Array tun und da drinnen einfach das kleinste raus fischen?
 
Zuletzt bearbeitet:
Zurück