Laden...

[gelöst]RichTextBox Zeilenweise durchgehen

Erstellt von Bodie vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.372 Views
B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren
[gelöst]RichTextBox Zeilenweise durchgehen

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

Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.

M
89 Beiträge seit 2006
vor 13 Jahren
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
            }
309 Beiträge seit 2008
vor 13 Jahren

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


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



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));}}

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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.

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.

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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

Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.

M
89 Beiträge seit 2006
vor 13 Jahren

Ja das liegt daran

http://msdn.microsoft.com/en-us/library/xc4fh98s.aspx

Selects a range of text in the text box.

309 Beiträge seit 2008
vor 13 Jahren

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");
}

;

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));}}

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

Ja genau, damit klappt es fast. 👍

Jetzt wird eine ArgumentOutOfRangeException geworfen.

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.

M
89 Beiträge seit 2006
vor 13 Jahren

Der Fehler sollte ja klar sein, oder?

Der String ist 50 Zeichen lang und dein startindex liegt irgendwo dahinter

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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.

M
89 Beiträge seit 2006
vor 13 Jahren

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

http://msdn.microsoft.com/en-us/library/aka44szs.aspx

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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

Wer immer das tut, was er schon kann,
bleibt immer das, was er schon ist.

M
89 Beiträge seit 2006
vor 13 Jahren

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...

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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.

Z
403 Beiträge seit 2007
vor 13 Jahren

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é

B
Bodie Themenstarter:in
33 Beiträge seit 2010
vor 13 Jahren

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.