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.

.NET-Hilfe gesucht?

Du baust eine Desktop-Anwendung?

Ich entwickle seit über 17 Jahren professionell in VB.NET und C#. Von Dateidialogen bis zur kompletten WinForms-Anwendung kann ich helfen.

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.MyDocuments für Benutzerdokumente
  • Environment.SpecialFolder.Desktop fü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.

Projekt in Planung?

Brauchst du eine fertige WinForms-Anwendung?

Von Dateidialogen bis zur kompletten datengetriebenen Desktop-App: Ich entwerfe Software, die hält. Lass uns über dein Projekt sprechen.

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

EigenschaftStandardZweck
Filter(leer)Einträge im Dateityp-Dropdown
FilterIndex1Vorausgewählter Filter (1-basiert)
FileName(leer)Gewählter Dateipfad nach dem Dialog
FileNames(leer)Alle gewählten Pfade bei Multiselect
InitialDirectory(leer)Startordner
MultiselectFalseMehrfachauswahl erlauben
CheckFileExistsTruePfade ablehnen, die nicht existieren
CheckPathExistsTrueUngültige Ordnerpfade ablehnen
Title„Öffnen“Fenstertitel des Dialogs
ReadOnlyCheckedFalse„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.

Interessiert?

Erfahrenen .NET-Entwickler gesucht?

Ich übernehme dein Projekt, von Dateioperationen bis zur fertigen Desktop-Anwendung. Schreib mir einfach eine Nachricht.

FAQ

Wie öffne ich einen OpenFileDialog in VB.NET?

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.

Wie wähle ich mehrere Dateien mit dem OpenFileDialog aus?

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).

Wie filtere ich Dateitypen im OpenFileDialog?

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".

Liest der OpenFileDialog die Datei selbst?

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.

Was ist der Unterschied zwischen OpenFileDialog und SaveFileDialog?

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Robert Skibbe
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.