Announcement

Collapse
No announcement yet.

Listenverarbeitung mit 2 TextBoxen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Listenverarbeitung mit 2 TextBoxen

    Hallo erstmal...

    bin neu hier im Forum und beschäftige mich seit ca. einer Woche mit Visual Basic.

    Habe nun eine Aufgabenstellung vorliegen in der ich in einer GUI mit 2 TextBoxen und einem Button es so programmieren soll, dass bestehender Text aus der ersten Textbox auf Knopfdruck in die zweite TextBox ausgegeben wird.

    Allerdings soll erst ab einem bestimmten Buchstaben pro Zeile der ersten TextBox kopiert werden und nicht der ganze Text, sodass man beispielsweise die ersten 54 Ziffernfolge der ersten Zeile weg lässt.

    Hier mein bisher geschriebener Code der nicht wirklich funktioniert. Das einfache ausgeben der TextBox 1 in die TextBox 2 ist kein Problem, aber sobald ich mit dem Mid() Befhel die Startposition der Zeilen definieren will, geht gar nichts mehr:

    [highlight=vbnet]

    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    For Each Item In Split(TextBox1.Text, vbCrLf)

    Dim a As String
    a = Mid(Item, 54)

    TextBox2.Text = a

    Next

    End Sub


    End Class

    [/highlight]
    Zuletzt editiert von Sev7eNup; 21.11.2009, 13:42.

  • #2
    Hi,

    dein Fehler liegt in Folgender Zeile:

    [highlight=vbnet]
    TextBox2.Text = a
    [/highlight]

    Du ersetzt innerhalb der Schleife immer wieder den Text, den du zuvor in die Textbox geschrieben hast. Die zweite Zeile ersetzt also die Erste und wird nicht hinten angefügt.

    Um den Fehler zu beheben, könntest du zum Beispiel alle Zeichenketten in einem Array speichern und dieses mit Join() wieder in eine Zeichenkette umwandeln. Oder du setzt die Zeichenketten direkt in der Schleife zusammen.

    Ich persönlich würde außerdem die Methode Substring() der Funktion Mid vorziehen, da es objektorientierter ist.
    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

    Viele Grüße Novi

    Comment


    • #3
      Habe jetzt versucht mit einem Array erstmal ohne Schleife die erste Zeile ab der 54. Ziffer anzeigen zu lassen. Leider ohne Erfolg.


      [highlight=vbnet]
      Dim array(24) As String
      Dim Item
      Item = Split(TextBox1.Text, vbCrLf)

      array(0) = Mid(Item, 54)


      TextBox2.Text = array(0)

      [/highlight]

      Als Fehlermeldung wird angegeben : " Ungültige Konvertierung von Typ String() in Typ String "

      Comment


      • #4
        Die Schleife wird aber schon benötigt!

        Wenn du es erstmal nur für die erste Zeile machen willst, dann so:

        [highlight=vbnet]
        Dim array(24) As String
        Dim Items() As String
        Items = Split(TextBox1.Text, vbCrLf)

        array(0) = Mid(Items(0), 54)


        TextBox2.Text = array(0)

        [/highlight]

        Ansonsten bist du mit dem Array schon nahe dran.
        "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

        Viele Grüße Novi

        Comment


        • #5
          Danke erstmal für deine schnelle, kompetente Hilfe.

          War ja schon sehr nah dran *freu*, jetzt funktioniert das schonmal für die erste Zeile.

          Nun soll das ganze ja für die restlichen Zeilen auch geschehen. Ich nehme mal an, dass man eine Schleife verwenden könnte, aber ich hab keine Idee wie man diese mit einem Array in Verbindung bringt. Oder gibt es sogar eine Möglichkeit das er das Array einfach abarbeite bis zum Schluss ?

          Comment


          • #6
            Hi,

            das ist jetzt nicht weiter schwer:

            [highlight=vbnet]
            Dim Items() As String = Split(TextBox1.Text, vbCrLf)
            Dim ShortItems(Items.Length) As String

            For i As Integer = 0 To Items.Length - 1
            ShortItems(i) = Mid(Items(i), 54)
            Next

            TextBox2.Text = Join(ShortItems, vbCrLf)
            [/highlight]
            "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

            Viele Grüße Novi

            Comment


            • #7
              Hallo
              Das ganze ohne VB6 Altlasten

              [highlight=vbnet]Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
              For Each l As String In TextBox1.Lines
              If l.Length > 54 Then
              TextBox2.AppendText(l.Substring(54) & Environment.NewLine)
              End If
              Next
              End Sub[/highlight]

              cu

              Comment


              • #8
                Wunderbar, es funktioniert jetzt. Aber ich muss ehrlich sagen, dass ich den Code nicht wirklich verstehe. Was sagt beispielsweise das mit dem length - 1 aus und welche Variablen machen was.

                Wäre nett, wenn du das kurz erläutern könntest.

                ps.: meine damit den Beitrag von Novi.

                Danke auch an Hauti, aber das ist absolut weg von meinem Ansatz, wenn auch sicherlich besser programmiert.

                Comment


                • #9
                  beispielsweise das mit dem length - 1
                  Wenn du eine Sammlung von Objekten hast, die du durchlaufen willst, gibt die Eigenschaft length üblicherweise die Anzahl zurück. Ein Durchlauf endet dann bei length-1, weil die Zählung der Objekte bei 0 beginnt
                  Christian

                  Comment


                  • #10
                    Originally posted by Hauti View Post
                    Hallo
                    Das ganze ohne VB6 Altlasten
                    Das ist natürlich sauberer. Jedoch möchte ich darauf hinweisen, dass sich die Ergebnisse natürlich leicht unterscheiden werden. Wenn eine Zeile weniger als 54 Zeichen enthält wird bei dir keine leere Zeile im Ergebnis stehen, bei "meiner" Lösung schon. Außerdem fügst du immer eine neue Zeile am Ende ein. Also auch nach der letzten Zeile.
                    "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                    Viele Grüße Novi

                    Comment


                    • #11
                      Hi,

                      nochmal mit Kommentaren:

                      [highlight=vbnet]
                      ' Es wird die Variable Items als Array bestehend aus Zeichenketten deklariert.
                      ' Das Array wird gleich mit den Zeilen aus TextBox1 gefüllt.
                      Dim Items() As String = Split(TextBox1.Text, vbCrLf)

                      ' ShortItems ist ebenfalls ein Array, das die gekürzten Zeilen aufnimmt.
                      ' Das Array ShortItems wird genau so lang, wie das Array Items
                      Dim ShortItems(Items.Length) As String

                      ' Alle Einträge werden durchlaufen
                      For i As Integer = 0 To Items.Length - 1
                      ' Jeder Eintrag wird gekürzt und in das zweite Array geschrieben
                      ShortItems(i) = Mid(Items(i), 54)
                      Next

                      ' Das Array wird wieder zu einer Zeichenkette zusammengefasst
                      ' (Umkehrung von Split)
                      TextBox2.Text = Join(ShortItems, vbCrLf)
                      [/highlight]
                      "(...) deshalb mag ich Binärtechnik. Da gibt es nur drei Zustände: High, Low und Kaputt." (Wau Holland)

                      Viele Grüße Novi

                      Comment


                      • #12
                        Ganz großer dank an dich Novi, aber auch an die anderen. Habt mir sehr geholfen.

                        Allerdings find ich das mit den verschatelten Arrays schon heftig, aber ich knie mich da mal ein bisschen rein...

                        Comment

                        Working...
                        X