Entwickler-Ecke
WinForms - Einfügen von Zeilenumbruch in string
drems - Do 27.09.12 22:49
Titel: Einfügen von Zeilenumbruch in string
Hallo, hätte noch mal eine Frage an euch. Ich würde gerne in einen String, der aus einer Textbox kommt, der aus ca 100-200 Zeichen besteht, spätestens an 22. Stelle ein <br /> einfügen. Falls dort kein Leerzeichen ist, soll so weit zurückgezählt werden, bis ein Leerzeichen gefunden wurde und dann dort das <br /> eingefügt werden. Ich beschäftige mich schon ewig mit dem Problem, mir fehlen aber anscheinend einfach die Kenntnisse um es zu realisieren.
Bin für Codebeispiele und sonstige Hilfe dankbar
drems - Fr 28.09.12 11:15
das hat mir schon mal ein bißchen geholfen, dankeschön ;-)
wenn ich dort jetzt den Beispieltext "Mein name ist Hans und ich bin vierzig Jahre alt. Mein name ist Hans und ich bin vierzig Jahre alt. Mein name ist Hans und ich bin vierzig Jahre alt. Mein name ist Hans und ich bin vierzig Jahre alt." nehme, kriege ich ja meine Liste wrappedLines mit dem Index 0-9. Wennn ich dort jetzt an jeden "Teil" ein <br /> anfügen wollte, wie müsste ich das denn machen?
Ralf Jansen - Fr 28.09.12 11:20
Über dein wrappedLines iterieren (foreach) und an jeden String deinen Wunschstring anhängen.
drems - Fr 28.09.12 11:35
Entschuldigung erstmal für die vielen Frgaen und großen Dank für die Hilfe. Wie greife ich denn genau darauf zu? Es muss ja am Ende irgendwie so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| static class WordWrap { public static string[] WordWrapi(this string str, int width) { if (str == null) throw new NullReferenceException();
List<string> wrappedLines = new List<string>();
if (str.Length <= width) { wrappedLines.Add(str); } else { string[] words = str.Split(' '); StringBuilder lineBuilder = new StringBuilder(); bool firstWord = true; foreach (var word in words) { if (lineBuilder.Length + word.Length < width) { if (firstWord) { lineBuilder.Append(word); firstWord = false; } else lineBuilder.Append(" " + word); } else { wrappedLines.Add(lineBuilder.ToString()); lineBuilder = new StringBuilder(); lineBuilder.Append(word); } }
wrappedLines.Add(lineBuilder.ToString()); foreach (string word in wrappedLines) { wrappedLines.Add(""); } } return wrappedLines.ToArray(); } } |
Kriege dort aber immer den Fehler:
Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden.
Moderiert von
Th69: C#-Tags hinzugefügt
Th69 - Fr 28.09.12 12:26
Hallo drems,
dir scheinen noch die wesentlichsten Grundlagen zu fehlen, was die Programmieren mit Listen und Datentypen angeht.
Du willst doch an jede Zeile den Umbruch dranhängen, und nicht hinten an die Liste.
Entferne deine foreach-Schleife und ändere die
wrappedLines.Add(...)-Zeilen in
C#-Quelltext
1:
| wrappedLines.Add(lineBuilder.ToString() + ""); |
Ralf Jansen - Fr 28.09.12 12:36
Du willst nicht wrappedLines ändern sondern word! Also die string in der Liste ändern und nicht die Liste um einen weiteren string ergänzen.
ich würde empfehlen das in einer Schleife nach dem WordWrap Algorithmus zu machen. Das eine ist eben ein WordWrap Algorithmus das andere ein ersetze (bzw. ergänze) einen Zeilenumbruch durch <br/> Algorithmus. 2 Aufgaben die man auch getrennt behandeln sollte um sie leichter wiederverwenden zu können.
drems - Fr 28.09.12 13:12
ja, habe mir auch schon ein Buch zu C# gekauft, allerdings hat mir das bei meinem Problem nicht so arg geholfen. Hätte noch eine letzte Frage, ich kriege ja den Text, den ich aufteile über eine Textbox. Nach dem
WordWrap(richtextbox1.text, 20) habe ich ein StringArray, gibt es einen einfachen Weg meinen Text aus der Textbox durch meinen anderen zu ersetzen?
Hatte es mit
richtextbox1.Text += richtextbox1.Text.WordWrapi(20).ToString(); probiert, liefert allerdings nichts das, was ich suche.
ok hab selbst geschafft, vielen dank nochmal für eure hilfe. Habe es jetzt über
richtextbox1.Text = ConvertArray(richtextbox1.Text.WordWrap(20)); gelöst.
Moderiert von
Th69: C#-Tags hinzugefügt
Moderiert von
Th69: Beiträge zusammengefasst
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!