none
Listbox Einträge Zeilenweise einlesen und mit Textbox vergleichen RRS feed

  • Frage

  • Hallo Leute,

    ich versuche momentan eine Lösung für folgendes Problem zu finden:

     

    Ich habe eine Listbox welche mir Daten aus einer Textdatei darstellt. Das klappt auch wunderbar. Jetzt möchte ich jedoch die Listbox Items mit einer Textbox sprich derer Inhalt vergleichen. Sollte der String in der Textbox nicht identisch(genau schreibweise z.B. C++, Test - es reicht also nicht nur die Übereinstimmung C++ sondern alles muss stimmen) mit dem eines Listeneintrages aller Items sein so soll der String in die Textdatei angefügt werden.

    Kann mir bitte jemand helfen.

    Momentan habe ich folgendes:

        
        For Each Zeile As String In ListBox3.Items
          If Zeile = TextBox2.Text Then
            Exit For
          Else : IO.File.WriteAllText(HISTORIE, TextBox2.Text + vbNewLine + IO.File.ReadAllText(HISTORIE))
          End If
        Next

    LG

     

    Donnerstag, 12. August 2010 12:26

Antworten

  • Hallo,

    Ich habe eine Listbox welche mir Daten aus einer Textdatei darstellt.
    Das klappt auch wunderbar. Jetzt möchte ich jedoch die Listbox Items
    mit einer Textbox sprich derer Inhalt vergleichen.
    Sollte der String in der Textbox nicht identisch(genau schreibweise
    z.B. C++, Test - es reicht also nicht nur die Übereinstimmung C++
    sondern alles muss stimmen) mit dem eines Listeneintrages aller
    Items sein so soll der String in die Textdatei angefügt werden.

    Kann mir bitte jemand helfen.

    Na klar doch, hier werden Sie geholfen.

    Füge das nachfolgende Beispiel einfach in ein leeres Formmodul
    (Form1.vb) ein.

    ' / Beginn Code Form1.vb
    Public Class Form1
        Private mFileName As String
        Private mDT As DataTable
        Private mErrFlag As Boolean
        Private WithEvents LB As ListBox
        Private WithEvents TB As TextBox

        Private Sub Form1_Load _
                (ByVal sender As System.Object, _
                 ByVal e As System.EventArgs _
                ) Handles MyBase.Load

            ' Dateiname der XML-Datei zum Speichern der DataTable
            mFileName = "D:\XMLData.xml"

            CreateDataTable()

            ' Listbox (LB) erstellen
            LB = New ListBox
            With LB
                .Name = "LB"
                .Font = New Font("Arial", 12)

                .SetBounds _
                        (10, 10, _
                         Me.ClientSize.Width - 20, _
                         200)

                .IntegralHeight = False

                .Anchor = _
                        AnchorStyles.Left Or _
                        AnchorStyles.Top Or _
                        AnchorStyles.Right Or _
                        AnchorStyles.Bottom
            End With
            Me.Controls.Add(LB)

            ' Textbox (TB) erstellen
            TB = New TextBox
            With TB
                .Name = "TB"
                .Font = New Font("Arial", 16)

                .SetBounds _
                        (10, LB.Bottom + 15, _
                         LB.Width, .Height)

                .Anchor = _
                        AnchorStyles.Left Or _
                        AnchorStyles.Right Or _
                        AnchorStyles.Bottom

            End With
            Me.Controls.Add(TB)
        End Sub

        Private Sub Form1_Shown _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles Me.Shown

            Try
                mDT.ReadXml(mFileName)

            Catch exFNF As System.IO.FileNotFoundException
                ' XML-Datei ist noch nicht vorhanden
                FillDataTable()

            Catch ex As Exception
                ' sonstige Fehler beim Lesen der XML-Datei
                MsgBox(ex.Message, MsgBoxStyle.Exclamation)
                mErrFlag = True
                Me.Close()
                Exit Sub
            End Try

            ' Inhalt der DataTable (mDT) in der ListBox anzeigen
            LB.DisplayMember = mDT.Columns(0).ColumnName
            LB.ValueMember = mDT.Columns(0).ColumnName
            LB.DataSource = mDT
        End Sub

        Private Sub Form1_FormClosing _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.FormClosingEventArgs _
                ) Handles Me.FormClosing

            If Not mErrFlag Then
                ' DataTable als XML-Datei (mFileName) speichern
                mDT.WriteXml(mFileName)
            End If
        End Sub

        Private Sub CreateDataTable()
            ' Erzeugen der DataTable
            Dim DC As DataColumn
            mDT = New DataTable
            With mDT
                .TableName = "mDT"
                DC = .Columns.Add("Text", GetType(String))
                .Constraints.Add("pkText", DC, True)
            End With
        End Sub

        Private Sub FillDataTable()
            ' DataTable mit Grunddaten füllen
            Dim DR As DataRow
            Dim i As Integer
            Dim Items() As String = New String() {"Hund", "Katze", "Maus"}
            For i = 0 To Items.GetUpperBound(0)
                DR = mDT.NewRow
                DR.Item(0) = Items(i)
                mDT.Rows.Add(DR)
            Next
            mDT.AcceptChanges()
        End Sub

        Private Sub TB_KeyPress _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyPressEventArgs _
                ) Handles TB.KeyPress

            ' Nach dem Drücken der Eingabetaste prüfen
            ' ob der in die Textbox eingegebene Wert
            ' bereits in der DataTable existiert.

            If e.KeyChar = Chr(Keys.Enter) Then
                If TB.Text.Trim.Length > 0 Then
                    Dim DR As DataRow
                    DR = mDT.Rows.Find(TB.Text)

                    If DR IsNot Nothing Then
                        If DR.Item(0).Equals(TB.Text) Then

                            MsgBox _
                                    (TB.Text & " bereits vorhanden!", _
                                     MsgBoxStyle.Information)

                            Exit Sub
                        End If
                    End If

                    ' TB.Text ist in der DataTable noch nicht vorhanden.
                    ' Neuen Eintrag (DataRow) in der DataTable und
                    ' damit auch in der Listbox erstellen.
                    DR = mDT.NewRow
                    DR.Item(0) = TB.Text
                    mDT.Rows.Add(DR)
                    mDT.AcceptChanges()
                End If
            End If
        End Sub

        Private Sub LB_KeyUp _
                (ByVal sender As Object, _
                 ByVal e As System.Windows.Forms.KeyEventArgs _
                ) Handles LB.KeyUp

            ' Den in der Lisbox ausgewählten Eintrag aus der
            ' DataTable und damit auch aus der Listbox entfernen

            If e.KeyData = Keys.Delete Then

                Dim DRV As DataRowView = _
                    DirectCast(LB.SelectedItem, DataRowView)

                If DRV IsNot Nothing Then
                    Dim DR As DataRow = DRV.Row
                    mDT.Rows.Remove(DR)
                End If
            End If
        End Sub
    End Class
    ' \\\ E N T E

    Nach dem Programmstart siehst Du eine Form mit einer Listbox (LB)
    und einer Textbox (TB).

    Nach dem Drücken der Eingabetaste wird ein in der Textbox
    eingegebener Text in der als Datenquelle für die Listbox genutzen
    DataTable (mDT) gesucht. Bei der Suche wird Gross- u. Kleinschreibung
    beachtet.
    Wird ein entsprechender Eintrag in der DataTable gefunden, passiert
    weiter nichts.
    Wird der in der Textbox stehende Text in der DataTable nicht gefunden,
    wird der DataTable (mDT) eine neue DataRow mit eben diesem Text
    hinzugefügt und die Listbox zeigt dann auch diesen neuen Text.

    Es können auch Einträge (DataRows) aus der DataTable und damit
    aus der Listbox entfernt werden.
    Dazu den entspr. Eintrag in der Listbox auswählen und die "Entf"-Taste
    drücken.

    Die DataTable wird beim ersten Programmstart mit Standarddaten
    (Hund, Katze, Maus) gefüllt.
    Beim Beenden des Programms wird die DataTable (mDT) via
    mDT.WriteXML(mFileName) mit dem akt. Inhalt gespeichert.
    Beim nächsten Programmstart wird die DataTable via mDT.ReadXml(mFileName)
    erstellt und mit den gespeicherten Daten befüllt.

    Gruß aus St.Georgen
    Peter Götz
    www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

    • Als Antwort markiert weltenspalter Montag, 16. August 2010 10:38
    Freitag, 13. August 2010 09:46