Autor Beitrag
drems
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 27.09.12 22:49 
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
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 28.09.12 09:43 
Hallo drems,

du hattest doch schon unter Zeilenumbruch Richtextbox so eine Anfrage gestellt - vllt. solltest du demnächst mal selber etwas Code posten, damit man dir effektiver helfen kann.

Du hast aber Glück: gerade heute hat ein User auf myCSharp.de so einen Code gepostet: Einfacher word wrap Algorithmus als extension method für System.String (den du dann sicherlich noch ein bißchen für deine Zwecke anpassen mußt...)
drems Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 28.09.12 11:20 
Über dein wrappedLines iterieren (foreach) und an jeden String deinen Wunschstring anhängen.
drems Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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:
ausblenden volle Höhe 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 user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ausblenden C#-Quelltext
1:
wrappedLines.Add(lineBuilder.ToString() + "");					
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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 user profile iconTh69: C#-Tags hinzugefügt
Moderiert von user profile iconTh69: Beiträge zusammengefasst