Strings aus einer Multiline Textbox verwenden

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VB.neter0101.

    Strings aus einer Multiline Textbox verwenden

    Hallo,

    Ich habe heute eine WPF Anwendung erstellt (zuvor habe ich mit Windows Forms gearbeitet). Dort habe ich folgenden XAML Code verwendet, um eine Multiline Textbox zu erzeugen:

    XML-Quellcode

    1. <TextBox Height="200" Width="500" TextWrapping="Wrap" AcceptsReturn="True" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"/>


    Ich beschreibe nun einmal den Vorgang den ich jetzt ausführen würde, wenn das Programm startet. In die Multiline Textbox gebe ich einige Strings ein z.B.

    Auto1
    Auto2
    Auto3

    Diese Werte stehen auch untereinander, so wie das auch sein soll. Mein Problem ist jetzt, dass ich jede Zeile nun im Programm selbst verwenden möchte. Ich habe mir testweise mal die Strings der Reihe nach ausgeben lassen:

    C#-Quellcode

    1. int lineCount = textBox.LineCount;
    2. for (int line = 0; line < lineCount; line++)
    3. {
    4. MessageBox.Show(textBox.GetLineText(line));
    5. }


    Die MSG Box zeigt auch die Strings richtig an. Wenn ich die Strings jedoch verarbeiten möchte, in eine Methode die als Input Parameter ein String bekommt, dann erhalte ich eine Fehlermeldung.
    Sagen wir einfach mal ich versuche Folgendes zu machen:

    C#-Quellcode

    1. // für jede Zeile mache:
    2. superTolleMethode(textBox.GetLineText(line));


    Weil ich ausschließen wollte, dass meine Methode falsch ist, habe ich dann einfach folgendes gemacht:

    C#-Quellcode

    1. // Vgl oben mein eigentliches Ziel
    2. string str1 = "Auto1";
    3. superTolleMethode(str1);
    4. string str2 = "Auto2";
    5. superTolleMethode(str2);
    6. string str3 = "Auto3";
    7. superTolleMethode(str3);


    Das hat, was zu erwarten war, auch geklappt...
    Der Witz ist, erstelle ich einfach mehrere normale Textboxen, ohne Multiline und mache dann folgendes:

    C#-Quellcode

    1. // für jede Zeile mache:
    2. superTolleMethode(textBox1.GetLineText(0));
    3. superTolleMethode(textBox2.GetLineText(0));
    4. //...
    5. superTolleMethode(textBoxN.GetLineText(0));


    funktioniert alles bestens. Irgendwo scheint er Probleme bei der Multiline Textbox zu haben (vllt Return...). Ich nehme an, dass da irgendwo Speicherschrott mitgegeben wird. Eigentlich möchte ich nur Zeile für Zeile auslesen und den Inhalt (Textstring) für meine Methode verwenden. Weiß hierbei Jemand Rat?

    Edit:
    Ich habe das etwas eingrenzen können der "Speicherschrott" sind die ASCII Zeichen DEC 10 und 13, was dazu passt, da ich ja eine neue Linie in einer Multiline Textbox mit einem Enter bestätigen/anlegen/hinzufügen muss. Die Frage, wie komme ich nur an den Textstring ohne die "überflüssigen" Linebreak Zeichen dran?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB.neter0101“ ()

    ich könnte auch falsch liegen, aber ich vermute mal stark das LineCount, die tatsächliche Anzahl zurückgibt, da deine schleife und die eigentlichen Wrte jedoch bei 0 Anfangen, fragt deine Schleife einen nicht existenten wert ab, versuchs mal hiermit.

    C#-Quellcode

    1. {
    2. for (int I = 0; I <= tb_source.LineCount - 1; I++)
    3. MessageBox.Show(tb_source.GetLineText(I));
    4. }
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @asusdk
    Er verwendet ein echt kleiner als, das passt schon.

    VB.neter0101 schrieb:

    Die MSG Box zeigt auch die Strings richtig an. Wenn ich die Strings jedoch verarbeiten möchte, in eine Methode die als Input Parameter ein String bekommt, dann erhalte ich eine Fehlermeldung.
    Die da wäre ?

    Die String Klasse hat eine Replace Methode, die ASCII Chars 10 und 13 lassen sich bequem mit "\r" und "\n" darstellen.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    JA,

    C#-Quellcode

    1. textBox.GetLineText(line).Replace("\r","").Replace("\n","")


    ist dann auch meine Lösung gewesen. Irgendwie lag das auch etwas auf der Hand, dass da genau diese Zeichen vorkommen mussten. Ich hatte nur gehofft, einen etwas eleganteren Weg einschlagen zu können. Aber danke @Plexian und @asusdk für eure Mühe! Natürlich kann jeder Andere hier auch gerne noch seinen Teil dazu beitragen, auf der Suche nach einer eleganteren Lösung, wenn es denn eine gibt?

    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()