Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung

...powered by haas.homelinux.net...

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 5 Dateizugriff
  gp 5.1 Prüfen, ob eine Datei vorhanden ist
  gp 5.2 Textdateien lesen und schreiben
  gp 5.3 Der OpenFileDialog
  gp 5.4 DriveListBox, DirListBox und FileListBox
  gp 5.5 Fehler
  gp 5.6 Bitte warten Sie ...
  gp 5.7 Zusammenfassung


Galileo Computing

5.4 DriveListBox, DirListBox und FileListBox  toptop

Diese drei Steuerelemente sind nach der Standardinstallation noch nicht in der Toolbox vorhanden. Sie müssen in eines der Register hinzugefügt werden. Dies geschieht mit der rechten Maustaste über den Kontextmenübefehl »Toolbox anpassen«. Dort finden sich die (alten) COM-Steuerelemente und die nun neuen .NET-Frameworkkomponenten. Und dort können die drei Komponenten »DriveListBox«, »DirListBox« und »FileListBox« ausgewählt werden. Sie erscheinen danach auf dem Registerblatt.

Abbildung

Abbildung 5.6   Neue Steuerelemente können hinzugefügt werden.

Abbildung

Abbildung 5.7   Die drei Steuerelemente

Werden sie auf das neue Formular gezogen, dann wird bereits ein Laufwerk, eine Ordnerliste und werden einige Dateien aus einem Ordner angezeigt. Ein Test zeigt, dass zwar Laufwerk und Ordner geändert werden können, aber dass die Steuerelemente nicht miteinander in Zusammenhang stehen. Mit einem Doppelklick auf »DriveListBox« gelangen wir in das Ereignis »SelectedIndexChanged«. Mit der Eigenschaft »Drive« kann das aktuell gewählte Laufwerk abgefangen werden. Dieses wird an die Eigenschaft »Path« der »DirListBox« übergeben. Also beispielsweise so:

Private Sub DriveListBox1_SelectedIndexChanged(ByVal _
sender As System.Object, ByVal e As System.EventArgs) _
Handles DriveListBox1.SelectedIndexChanged
   Me.DirListeBox1.Path = Me.DriveListBox1.Drive
End Sub

Analog dazu könnten »DirListBox« und »FileListeBox« synchronisiert werden:

Private Sub DirListBox1_SelectedIndexChanged(ByVal _
sender As System.Object, ByVal e As System.EventArgs) _
Handles DirListBox1.SelectedIndexChanged
   Me.FileListeBox1.Path = Me.DirListBox1.Path
End Sub
Abbildung

Abbildung 5.8   Das korrekte Ereignis

Abbildung

Abbildung 5.9   Nun sind die Steuerelemente synchronisiert.

Ein Test zeigt, dass das Ändern des Laufwerkbuchstabens die entsprechenden Ordner anzeigt, dass aber das Öffnen oder Schließen eines Ordners nicht die aktuelle Dateienauswahl signalisiert. Der Grund ist schnell gefunden: Das Ereignis »SelectedIndexChanged« ist nicht das korrekte. Besser geeignet ist das Ereignis »Change«. Damit werden die jeweiligen Dateien des geöffneten Ordners angezeigt. Damit in der FileListBox nur Excel-Dateien angezeigt werden, kann die Eigenschaft »Pattern« von »*.*« auf »*.xls« gesetzt werden.

Nun kann der Benutzer einen Dateinamen in ein dafür vorbereitetes Textfeld eingeben, das anschließend weiterverarbeitet wird. An dieser Stelle wird der Dateiname erneut in »info.txt« eingetragen und die neue Excel-Mappe generiert:

Imports System.IO
...
Dim objDateiMacher As StreamWriter
Dim strPfad As String
Dim xlApp As Excel.Application
Dim xlMappe As Excel.Workbook
Dim xlBlatt As Excel.Worksheet
Dim xlZelle As Excel.Range

If Me.txtDateiName.Text = "" Then
   MessageBox.Show("Bitte einen Dateinamen eingeben!")
   Me.txtDateiName.Select()
   Exit Sub
ElseIf Me.txtDateiName.Text.EndsWith(".xls") = False Then
   Me.txtDateiname.Text = _
   Me.txtDateiname.Text & ".xls"
End If

If Me.DirListeBox.Path.EndsWith("\") = True Then
   strPfad = Me.DriveListeBox.Path
Else
   strPfad = Me.DirListeBox.Path & "\"
End If

objDateiMacher = New _
StreamWriter(System.Environment.SystemDirectory. _
ToString & "\info.txt")
objDateiMacher.Write(strPfad & Me.txtDateiName.Text)
objDateiMacher.Close()
objDateiMacher = Nothing

xlApp = New Excel.Application()
xlApp.Visible = False
xlMappe = xlApp.Workbooks.Add()
xlBlatt = xlMappe.Worksheets(1)
xlZelle = xlBlatt.Range("A1")
xlZelle.Offset(0, 0).Value = "Nr."
xlZelle.Offset(0, 1).Value = "Datum"
xlZelle.Offset(0, 2).Value = "Name"
xlZelle.Offset(0, 2).Value = "Preis"
xlMappe.SaveAs(strPfad & Me.txtDateiName.Text)
xlMappe.Close()
xlApp.Quit()
xlZelle = Nothing
xlBlatt = Nothing
xlMappe = Nothing
xlApp = Nothing

Nun existiert die Excel-Mappe. Entweder wurde sie in »info.txt« gefunden oder der Benutzer hat sie mit dem OpenFileDialog ausgewählt oder er hat einen neuen Dateinamen angegeben, der als neue Mappe angelegt wurde. Alle drei Varianten führen dazu, dass in »info.txt« der korrekte Dateiname steht. Auf diesen wird nun zugegriffen und die Daten werden hineingeschrieben:

objDateiLeser = New StreamReader(strWinVerz & "\" & _
DATEINAME)
strExcelDateiname = objDateiLeser.ReadToEnd()
objDateiLeser.Close()
objDateiLeser = Nothing

Danach wird überprüft, ob er einen Namen in das dafür vorgesehene Textfeld eingegeben hat:

If Me.txtName.Text = "" Then
   MessageBox.Show("Bitte geben Sie Ihren Namen ein!")
   Me.txtName.Focus()
   Exit Sub
End If

Nimmt man den Süßigkeitenautomaten, so müsste man überprüfen, ob mindestens ein Eintrag ausgewählt wurde:

If Me.lstLiszt.SelectedIndex = -1 Then
   MessageBox.Show("Bitte wählen Sie einen Artikel aus!")
Else
...

Die Datei wird geöffnet und die Werte werden hineingeschrieben:

xlApp = New Excel.Application()
xlApp.Visible = False
xlMappe = xlApp.Workbooks.Open(strExcelDateiName)
xlBlatt = xlMappe.Worksheets(1)
xlZelle = xlBlatt.Range("A1")
intZeilen = xlZelle.CurrentRegion.Rows.Count

xlZelle.OffSet(intZeilen, 0).Value = intZeilen
xlZelle.OffSet(intZeilen, 1).Value = Today()
xlZelle. OffSet(intZeilen, 2).Value = _
txtName.Text
xlZelle. OffSet(intZeilen, 3).Value = txtGeld.Text
xlMappe.Save()
xlMappe.Close()
xlApp.Quit()

xlZelle = Nothing
xlBlatt = Nothing
xlMappe = Nothing
xlApp = Nothing
End If
Abbildung

Abbildung 5.10   Der Eintrag in info.txt

Abbildung

Abbildung 5.11   Die Datei wurde verschoben.

Abbildung

Abbildung 5.12   Der Benutzer kann nach ihr suchen.

Abbildung

Abbildung 5.13   Die Daten werden erfolgreich eingetragen.

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML