![]() |
Tipp 0087
|
ListBox-Einträge speichern und einlesen
|
 |
|
Autor/Einsender: Datum: |
|
M. Werner / T. Becker 08.10.2005/08.10.2009 |
|
Entwicklungsumgebung: |
|
VB.Net 2003/05 |
Framework: |
|
1.1 / 2.0 |
|
|
Da u.a. die Methoden IO.File.WriteAllLines, IO.File.ReadAllLines
sowie Items.Contains zur Prüfung auf Doppeleinträge im Framework 1.1 nicht verfügbar
sind und in VB 2003 das Framework 2.0 nicht eingebunden werden kann, beinhaltet dieser Tipp zusätzlich
eine Variante ab VB 2005.
|
|
|
Mit den Klassen IO.StreamWriter und IO.StreamReader kann der Inhalt einer Listbox in einer Textdatei
gespeichert und wieder ausgelesen werden. Über jeweils eine Schleife wird itemweise in die Datei gespeichert und zeilenweise
aus der Datei wieder ausgelesen. Weiterhin wird demonstriert, wie einer Listbox Einträge hinzugefügt und über ein Kontextmenü
(rechte Maustaste) wieder gelöscht werden können.
|
|
|
Public Class Form1
Inherits System.Windows.Forms.Form Vom Windows Form Designer generierter Code
Private sFile As String = System.IO.Path.Combine _
(Application.StartupPath, "Liste.dat")
Private Sub SaveListbox(ByVal ListBox As ListBox, _
ByVal sFile As String)
Dim writer As IO.StreamWriter
Dim i As Short
writer = New IO.StreamWriter(sFile)
For Each item As Object In ListBox1.Items
writer.WriteLine(ListBox.Items(i))
i += 1
Next
writer.Close()
End Sub
Private Sub ReadListbox(ByVal ListBox As ListBox, _
ByVal sFile As String)
Dim reader As IO.StreamReader
Dim sLine As String
ListBox.Items.Clear()
Dim oFile As New IO.FileInfo(sFile)
If oFile.Exists() = True Then
reader = New IO.StreamReader(sFile)
Do
sLine = reader.ReadLine()
If IsNothing(sLine) Then Exit Do
ListBox.Items.Add(sLine)
Loop
reader.Close()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
With ListBox1
.Items.Add("Arnie Müller")
.Items.Add("Peter Pankrat")
.Items.Add("Annelise Netrowic")
End With
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
SaveListbox(ListBox1, sFile)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
ReadListbox(ListBox1, sFile)
End Sub
Private Sub MenuItem1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MenuItem1.Click
If ListBox1.SelectedIndex() <> -1 Then
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex())
Else
MessageBox.Show("Bitte den zu löschenden Eintrag " & _
zuerst markieren!", "Eintrag markieren", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
End Class
|
|
|
|
Ziel dieses gleichnamigen Tipps ist es, das seit Framework 2.0 mögliche Speichern und Einladen von Textdateien durch
ein komplettes Stringarray aufzuzeigen. Die Verarbeitung erfolgt somit in "einem Rutsch", was gerade bei größeren Inhalten einen Geschwindigkeitsvorteil
bringt.
|
Weiterhin wird hier gezeigt, wie sich Doppeleinträge durch eine .Contains-Abfrage vermeiden lassen. Der Tipp verfügt über ein
ContextMenuStrip, womit durch rechte Maustaste auf ListBox ein selektierter Eintrag gelöscht werden kann.
|
|
|
Public Class Form1
' Der Speicherort der Textdatei
Private FILENAME As String = IO.Path.Combine _
(Application.StartupPath, "Liste.dat")
Private Sub SaveListbox(ByVal ListBox As ListBox, _
ByVal sFile As String)
' Inhalt einer ListBox speichern
With ListBox1.Items
' Alle Inhalte aus ListBox ins Stringarray bringen
Dim strArr(.Count - 1) As String
.CopyTo(strArr, 0)
' Array In Textdatei speichern
IO.File.WriteAllLines(sFile, strArr)
End With
End Sub
Private Sub ReadListbox(ByVal ListBox As ListBox, _
ByVal sFile As String)
' Vorhandenen ListBox-Inhalt löschen
ListBox.Items.Clear()
' Existsiert die Datei?
If IO.File.Exists(sFile) = True Then
' Inhalt einer Datei in ListBox einlesen
Dim strArr() As String = IO.File.ReadAllLines(sFile)
ListBox.Items.AddRange(strArr)
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' ListBox beim Anwendungstart füllen
Dim strPersonen() As String = {"Arnie Müller", "Peter Pankrat",_
"Annelise Netrowic"}
ListBox1.Items.AddRange(strPersonen)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' ListBox speichern
SaveListbox(ListBox1, FILENAME)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
' ListBox einlesen
ReadListbox(ListBox1, FILENAME)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click
' Inhalt der Listbox löschen
ListBox1.Items.Clear()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button4.Click
If CheckBox1.Checked Then
' Doppeleinträge verhindern (Contains)
If Not ListBox1.Items.Contains(TextBox1.Text) Then
' Eintrag hinzufügen
ListBox1.Items.Add(TextBox1.Text)
Else
MessageBox.Show("Eintrag schon vorhanden!", _
"Doppeleinträge werden nicht zugelassen.", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Else
' Eintrag hinzufügen (Doppelte zulassen)
ListBox1.Items.Add(TextBox1.Text)
End If
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button5.Click
' Applikation beenden
Me.Close()
End Sub
Private Sub MarkiertenEintragLöschenToolStripMenuItem_Click(ByVal _
sender As System.Object, ByVal e As System.EventArgs) _
Handles MarkiertenEintragLöschenToolStripMenuItem.Click
' Markierten Eintrag in Listbox löschen
' über das Contextmenu (rechte Maustaste)
If ListBox1.SelectedIndex() <> -1 Then
ListBox1.Items.RemoveAt(ListBox1.SelectedIndex())
Else
MessageBox.Show("Bitte den zu löschenden Eintrag zuerst"_
"markieren!", "Eintrag markieren", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
End Sub
End Class
|
|
|
|
|
Windows-Version |
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
|
Download (21,1
kB)
|
Downloads bisher: [ 935 ]
|
|
|