VB.NET OpenFileDialog – Datei öffnen mit Dialog (2026)
Der VB.NET OpenFileDialog lässt den Benutzer eine oder mehrere Dateien zum Öffnen auswählen, bevor deine Anwendung sie einliest. Er übernimmt Pfadauswahl, Dateitypfilter und Datei-Existenz-Prüfung in einem einzigen Control. Dieser Guide behandelt Einrichtung, Filter, Mehrfachauswahl, gängige Muster und die Integration mit dem eigentlichen Lesevorgang.
Inhaltsverzeichnis
- 1 Was ist der OpenFileDialog?
- 2 Einfaches Beispiel
- 3 Dateitypfilter einrichten
- 4 Standardordner setzen
- 5 Mehrere Dateien auswählen
- 6 Komplettes Beispiel: Textdatei einlesen
- 7 Binärdateien lesen (Bilder, PDFs)
- 8 Große Dateien mit StreamReader lesen
- 9 Alle wichtigen Eigenschaften im Überblick
- 10 Häufige Fehler
- 11 FAQ
- 12 Fazit
Was ist der OpenFileDialog?
Der OpenFileDialog ist ein WinForms-Control aus System.Windows.Forms. Beim Aufruf von ShowDialog() öffnet sich der Standard-Windows-Dialog „Öffnen“. Der Benutzer navigiert zu einem Ordner, wählt eine Datei aus und klickt Öffnen. Dein Code erhält dann den vollständigen Dateipfad über die Eigenschaft FileName.
Verwende ihn, wenn:
- Der Benutzer wählen soll, welche Datei geöffnet wird (Importe, Konfigdateien, Bilder)
- Du einen Dateitypfilter brauchst (z.B. nur .txt, .csv oder .png)
- Du eine eingebaute Prüfung willst, ob die gewählte Datei tatsächlich existiert
- Der Benutzer mehrere Dateien gleichzeitig auswählen können soll
Falls der Benutzer stattdessen ein Speicherziel wählen soll, verwende den SaveFileDialog.
Einfaches Beispiel
Der einfachste OpenFileDialog, der eine Textdatei einliest:
Using dlg As New OpenFileDialog()
dlg.Filter = "Textdateien (*.txt)|*.txt"
dlg.Title = "Textdatei öffnen"
If dlg.ShowDialog() = DialogResult.OK Then
Dim content As String = File.ReadAllText(dlg.FileName)
TextBox1.Text = content
End If
End Using
Der Using-Block gibt den Dialog nach der Verwendung frei. ShowDialog() gibt DialogResult.OK zurück, wenn der Benutzer auf Öffnen klickt, oder DialogResult.Cancel, wenn er den Dialog schließt. Prüfe immer das Ergebnis, bevor du die Datei liest.
Dateitypfilter einrichten
Die Filter-Eigenschaft steuert, welche Dateitypen im Dropdown erscheinen. Die Syntax ist identisch zum SaveFileDialog:
' Einzelner Filter dlg.Filter = "Textdateien (*.txt)|*.txt" ' Mehrere Filter dlg.Filter = "Textdateien (*.txt)|*.txt|CSV-Dateien (*.csv)|*.csv|Alle Dateien (*.*)|*.*" ' Zweiten Filter vorauswählen (1-basierter Index) dlg.FilterIndex = 2 ' Mehrere Endungen in einem Filter dlg.Filter = "Bilder (*.png;*.jpg;*.gif)|*.png;*.jpg;*.gif"
Um mehrere Endungen in einem Filtereintrag zu kombinieren, trenne sie mit Semikolons im Muster-Teil: *.png;*.jpg;*.gif. Der Benutzer sieht einen einzelnen „Bilder“-Eintrag, der alle drei Typen akzeptiert.
Standardordner setzen
Using dlg As New OpenFileDialog()
' Im Dokumente-Ordner des Benutzers starten
dlg.InitialDirectory = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments)
dlg.Filter = "CSV-Dateien (*.csv)|*.csv"
If dlg.ShowDialog() = DialogResult.OK Then
Dim content As String = File.ReadAllText(dlg.FileName)
End If
End Using
Gängige Optionen für InitialDirectory:
Environment.SpecialFolder.MyDocumentsfür BenutzerdokumenteEnvironment.SpecialFolder.Desktopfür den Desktop- Den Application Path für Dateien neben der Anwendung
Wenn du InitialDirectory nicht setzt, merkt sich der Dialog den zuletzt besuchten Ordner während der aktuellen Sitzung.
Mehrere Dateien auswählen
Setze Multiselect = True, damit der Benutzer mehrere Dateien auswählen kann. Die gewählten Pfade sind über FileNames (Plural) verfügbar:
Using dlg As New OpenFileDialog()
dlg.Filter = "Bilder (*.png;*.jpg)|*.png;*.jpg"
dlg.Multiselect = True
dlg.Title = "Bilder zum Importieren auswählen"
If dlg.ShowDialog() = DialogResult.OK Then
For Each filePath In dlg.FileNames
Dim img As Image = Image.FromFile(filePath)
' Jedes Bild verarbeiten...
Next
MessageBox.Show($"{dlg.FileNames.Length} Dateien ausgewählt.")
End If
End Using
Der Benutzer hält Strg gedrückt, um einzelne Dateien auszuwählen, oder Shift für einen Bereich. FileName (Singular) gibt weiterhin die erste gewählte Datei zurück; FileNames liefert alle als String()-Array.
Komplettes Beispiel: Textdatei einlesen
Ein realistisches Beispiel, das eine Textdatei mit Encoding-Unterstützung einliest, unter Verwendung von ReadAllText:
Imports System.IO
Imports System.Text
Private Sub BtnOeffnen_Click(sender As Object, e As EventArgs) Handles BtnOeffnen.Click
Using dlg As New OpenFileDialog()
dlg.Title = "Bericht öffnen"
dlg.Filter = "Textdateien (*.txt)|*.txt|CSV-Dateien (*.csv)|*.csv|Alle Dateien (*.*)|*.*"
dlg.InitialDirectory = Environment.GetFolderPath(
Environment.SpecialFolder.MyDocuments)
If dlg.ShowDialog() = DialogResult.OK Then
Dim content As String = File.ReadAllText(dlg.FileName, Encoding.UTF8)
TextBox1.Text = content
Me.Text = $"Editor - {Path.GetFileName(dlg.FileName)}"
End If
End Using
End Sub
Gib beim Lesen von Textdateien immer Encoding.UTF8 an, um Sonderzeichen korrekt zu verarbeiten. Path.GetFileName() extrahiert nur den Dateinamen aus dem vollen Pfad, was z.B. für den Fenstertitel nützlich ist.
Binärdateien lesen (Bilder, PDFs)
Der OpenFileDialog funktioniert für binäre Inhalte genauso. Nur die Lesemethode ändert sich:
' Bild in eine PictureBox laden
Using dlg As New OpenFileDialog()
dlg.Filter = "Bilder (*.png;*.jpg;*.bmp)|*.png;*.jpg;*.bmp"
If dlg.ShowDialog() = DialogResult.OK Then
PictureBox1.Image = Image.FromFile(dlg.FileName)
End If
End Using
' Datei als Byte-Array einlesen
Using dlg As New OpenFileDialog()
dlg.Filter = "Alle Dateien (*.*)|*.*"
If dlg.ShowDialog() = DialogResult.OK Then
Dim bytes() As Byte = File.ReadAllBytes(dlg.FileName)
' Bytes verarbeiten...
End If
End Using
Große Dateien mit StreamReader lesen
Für große Dateien oder zeilenweise Verarbeitung verwende einen StreamReader mit dem Pfad aus dem Dialog:
Using dlg As New OpenFileDialog()
dlg.Filter = "CSV-Dateien (*.csv)|*.csv"
If dlg.ShowDialog() = DialogResult.OK Then
Using reader As New StreamReader(dlg.FileName, Encoding.UTF8)
Dim lineNumber As Integer = 0
While Not reader.EndOfStream
Dim line As String = reader.ReadLine()
lineNumber += 1
' Jede Zeile verarbeiten...
End While
End Using
End If
End Using
Der StreamReader-Ansatz ist speichereffizienter für große Dateien, weil er Zeile für Zeile liest, statt die gesamte Datei in den Speicher zu laden. Mehr zum Lesen von Textdateien findest du im VB.NET Textdatei einlesen Guide.
Alle wichtigen Eigenschaften im Überblick
| Eigenschaft | Standard | Zweck |
|---|---|---|
Filter | (leer) | Einträge im Dateityp-Dropdown |
FilterIndex | 1 | Vorausgewählter Filter (1-basiert) |
FileName | (leer) | Gewählter Dateipfad nach dem Dialog |
FileNames | (leer) | Alle gewählten Pfade bei Multiselect |
InitialDirectory | (leer) | Startordner |
Multiselect | False | Mehrfachauswahl erlauben |
CheckFileExists | True | Pfade ablehnen, die nicht existieren |
CheckPathExists | True | Ungültige Ordnerpfade ablehnen |
Title | „Öffnen“ | Fenstertitel des Dialogs |
ReadOnlyChecked | False | „Schreibgeschützt öffnen“-Checkbox vorauswählen |
Häufige Fehler
Lesen ohne DialogResult zu prüfen
' SCHLECHT - FileName ist leer, wenn der Benutzer abbricht
dlg.ShowDialog()
Dim content = File.ReadAllText(dlg.FileName)
' GUT - Ergebnis zuerst prüfen
If dlg.ShowDialog() = DialogResult.OK Then
Dim content = File.ReadAllText(dlg.FileName)
End If
FileName statt FileNames bei Multiselect
' SCHLECHT - bekommt nur die erste Datei bei Multiselect
dlg.Multiselect = True
If dlg.ShowDialog() = DialogResult.OK Then
Dim content = File.ReadAllText(dlg.FileName) ' nur erste Datei!
End If
' GUT - alle gewählten Dateien durchlaufen
If dlg.ShowDialog() = DialogResult.OK Then
For Each path In dlg.FileNames
Dim content = File.ReadAllText(path)
Next
End If
Using-Block vergessen
Der OpenFileDialog hält unverwaltete Ressourcen (ein Windows-COM-Objekt). Ohne Using bleiben diese Ressourcen im Speicher, bis der Garbage Collector läuft. Wickle ihn immer in einen Using-Block ein.
FAQ
Erstelle einen New OpenFileDialog() in einem Using-Block, setze die Filter-Eigenschaft und rufe ShowDialog() auf. Prüfe, ob das Ergebnis DialogResult.OK ist, bevor du aus dlg.FileName liest.
Setze dlg.Multiselect = True vor dem Aufruf von ShowDialog(). Der Benutzer kann dann mit Strg oder Shift mehrere Dateien auswählen. Alle Pfade stehen in dlg.FileNames (Plural).
Setze die Filter-Eigenschaft mit dem Muster Beschreibung|*.endung. Für mehrere Typen trenne sie mit Pipes: "Text (*.txt)|*.txt|CSV (*.csv)|*.csv". Kombiniere Endungen mit Semikolons: "Bilder (*.png;*.jpg)|*.png;*.jpg".
Nein. Der Dialog lässt den Benutzer nur einen Dateipfad wählen. Du bist selbst dafür verantwortlich, die Datei zu lesen, z.B. mit File.ReadAllText(), File.ReadAllBytes() oder einem StreamReader mit dem Pfad aus dlg.FileName.
Der OpenFileDialog lässt den Benutzer eine bestehende Datei zum Lesen auswählen, mit eingebauter Existenz-Prüfung. Der SaveFileDialog lässt den Benutzer ein Ziel für eine neue Datei wählen, mit Überschreib-Bestätigung. Beide geben den gewählten Pfad über FileName zurück.
Fazit
Der OpenFileDialog gibt deiner VB.NET-Anwendung ein natives Datei-Öffnen-Erlebnis mit minimalem Code. Setze einen Filter für Dateitypen, aktiviere Multiselect für Batch-Operationen und prüfe immer DialogResult.OK bevor du liest. Für den eigentlichen Lesevorgang verwende File.ReadAllText() für Text oder File.ReadAllBytes() für Binärdaten. Musst du stattdessen Dateien speichern? Der SaveFileDialog funktioniert nach dem gleichen Muster. Mehr zum Lesen von Textdateien findest du im VB.NET Textdatei einlesen Guide.