Benutzer mit den meisten Antworten
Listbox Einträge Zeilenweise einlesen und mit Textbox vergleichen

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
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 TextBoxPrivate 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.BottomEnd With
Me.Controls.Add(TB)
End SubPrivate Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.ShownTry
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 SubPrivate Sub Form1_FormClosing _
(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs _
) Handles Me.FormClosingIf Not mErrFlag Then
' DataTable als XML-Datei (mFileName) speichern
mDT.WriteXml(mFileName)
End If
End SubPrivate 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 SubPrivate 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 SubPrivate 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) ThenMsgBox _
(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 SubPrivate 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 entfernenIf 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 ENach 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