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
[gelöst]RichTextBox Zeilenweise durchgehen
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

[gelöst]RichTextBox Zeilenweise durchgehen

beantworten | zitieren | melden

Hallo zusammen,

ich habe in meinem Programm eine RichTextBox. Diese muss ich Zeilenweise durchgehen und an einer bestimmten Position den Text in eine zweite TextBox schreiben.

Diese Schleife läuft durch, bis i kleiner als die Anzahl der Zeilennummern ist.

private void GetInvoiceNumber()
{
    int lineNumbers = rtbShowFile.Lines.Length;
    for (int i = 0; i < lineNumbers; i++)
    {
        rtbShowFile.Select(84, 7);
        //rtbShowFile.SelectionColor = Color.Blue;
        rtbInvoiceNumbers.AppendText(rtbShowFile.SelectedText + "\n");

        int currentLine = 0;
        currentLine++;
    }
}

Aber bis jetzt wird nur immer der Text der 1. Zeile in die TextBox geschrieben.

int currentLine = 0;
currentLine++;

Wie muss ich currentLine definieren, damit ich in die nächste(n) Zeile(n) komme?

Gruß,

Bodie
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Bodie am .
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
masterchris_99
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

Zitat von Bodie

int currentLine = 0;
currentLine++;

Wie muss ich currentLine definieren, damit ich in die nächste(n) Zeile(n) komme?

currentLine ist ein von dir selbst definierter Wert der nichts mit der RTB zu tun hat?!?

Zumal du bei jedem Durchgang diesen Wert neu mit 0 initialisierst und ihn dann inkrementierst.

            foreach (string line in rtb.Lines)
            {
                        // do it
            }
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von masterchris_99 am .
private Nachricht | Beiträge des Benutzers
Scavanger
myCSharp.de - Member

Avatar #avatar-3209.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

Nimm keine for-Schleife um die einzelnen Zeilen durchzugehen sondern foreach:


foreach (string line in richTextBox1.Lines)
{
// ...
}


Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Scavanger am .

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Das ist richtig.

Und es muss ja irgendwie möglich sein dieser Variable zu sagen, was die erste Zeile ist.
Denn damit kann ich ja pro Schleifendurchlauf in die nächste Zeile glangen und so den richtigen Wert auslesen.
Zitat
Zumal du bei jedem Durchgang diesen Wert neu mit 0 initialisierst und ihn dann inkrementierst.

Gut, dann muss ich den Startwert eben vor der Schleife setzen. Aber mir fehlt irgendwie der Durchblick, wie ich die erste Zeile übergeben kann.

Gruß,

Bodie
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Gut, laut Debugger werden mit der foreach- Schleife schonmal alle Zeilen durchlaufen. Danke

Aber in der AusgabeBox wird trotzdem nur der Wert der 1.Zeile ausgegeben.

Liegt das vielleicht an dieser Zeile?

rtbShowFile.Select(84, 7);
Das er da automatisch in die 1. Zeile springt und nur diesen Wert dann bekommt?

Gruß,

Bodie
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Bodie am .
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
masterchris_99
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

Ja das liegt daran

http://msdn.microsoft.com/en-us/library/xc4fh98s.aspx
Zitat
Selects a range of text in the text box.
private Nachricht | Beiträge des Benutzers
Scavanger
myCSharp.de - Member

Avatar #avatar-3209.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

Ah jetzt:

rtbShowFile.Select(84, 7);

arbeitet mit der ganzen richtextbox, du durchläufst zwar die einzelnen Zeilen macst damit aber nichts.

Was du willst ist:

 foreach (string line in richTextBox1.Lines)
{
         rtbInvoiceNumbers.AppendText(line.Substring(84, 7) + "\n");
}
;
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Scavanger am .

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Ja genau, damit klappt es fast.

Jetzt wird eine ArgumentOutOfRangeException geworfen.
Zitat
startIndex cannot be larger than length of string.
Parameter name: startIndex

Aber hast mir schon weiter geholfen, Danke

Gruß,

Bodie
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
masterchris_99
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

Der Fehler sollte ja klar sein, oder?

Der String ist 50 Zeichen lang und dein startindex liegt irgendwo dahinter
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Ja gut, aber ich kann den Startindex ja nicht wieder auf null setzen. Dann liefert er mir ja wieder falsche Ergebnisse oder?
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
masterchris_99
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

Guck doch einfach mal in die MSDN da ist alles super beschrieben.

http://msdn.microsoft.com/en-us/library/aka44szs.aspx
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Zitat
Die Summe von startIndex und length bezeichnet eine Position außerhalb dieser Instanz.
Das ist die Bedingung, damit die Exception ausgelöst wird.

Aber alle Werte, die vorhanden sind werden mir angezeigt. Ist also alles richtig. Diese Fehlermeldung ist also überflüssig, da alles so ist wie ich es brauche.

Darf man in so einem Fall die Exception unterdrücken oder sollte man es vermeiden?

Gruß,

Bodie
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Bodie am .
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
masterchris_99
myCSharp.de - Member



Dabei seit:
Beiträge: 89

beantworten | zitieren | melden

Also ich habe noch nie erlebt das die ArgumentOutOfRangeException
einfach so kam. Du probierst auf ein Element zuzugreifen welches nicht vorhanden ist.

Wenn ein Array 20 Elemente hat und ich probiere auf was größer gleich Array[20] zuzugreifen dann gibt es einen Fehler. Denn da ist nichts...
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Das ist ja das komische daran.

Ich habe von jeder Zeile(insgesamt 88) den gewünschten Wert erhalten.
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers
Zicore
myCSharp.de - Member



Dabei seit:
Beiträge: 403

beantworten | zitieren | melden

Hallo Bodie,

dann ist in der letzten zeile vielleicht nur ein leerzeichen.

Fakt ist das sind basics: [Hinweis] Wie poste ich richtig?
1.1 und 1.1.1

André
private Nachricht | Beiträge des Benutzers
Bodie
myCSharp.de - Member



Dabei seit:
Beiträge: 33
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

Ja in der letzten Zeile sind nur leerzeichen.

Danke an alle

Gruß,

Bodie
Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.
private Nachricht | Beiträge des Benutzers