Tipp 0212 Datei- und Ordnerdialoge
Autor/Einsender:
Datum:
  Thomas Becker
31.05.2012
Entwicklungsumgebung:   VB.Net 2005
Framework:   2.0
In diesem Tipp wird die Verwendung von OpenFileDialog (Datei öffnen-Dialog), SaveFileDialog (Datei speichern-Dialog) und FolderBrowserDialog (Ordnerauswahl-Dialog) aufgezeigt. Zur Demonstration können 3 unterschiedliche Filtervarianten für die FileDialoge verwendet werden.
Hinweis
Leider besitzt ein FolderBrowserDialog keine .Text-Eigenschaft, so dass als Dialogfenstertext immer "Ordner suchen" erscheint. Eine Möglichkeit dies mit etwas Zusatzaufwand hinzubekommen, zeigt der folgende Forenthread via APIs (".Net gerechtere" Möglichkeiten sind wegen NotInheritable leider ausgeschlossen):
-> Titelzeilentext für FolderBrowserDialog
 
Public Class Form1
  Dim Pfad As String = Application.StartupPath

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
          EventArgs) Handles MyBase.Load
    ComboBox1.SelectedIndex = 0
  End Sub

  Private Sub Button1_Click(ByVal sender As Object, ByVal e As _
          EventArgs) Handles Button1.Click
    ' ### OpenFileDialog ###
    Dim txt As String = ""
    Using ofd As New OpenFileDialog

    With ofd
       ' Ordnervorschlag
      .InitialDirectory = Pfad
      .Title = "Wähle Datei zum öffnen"
       ' Dateivorschlag (falls sinnvoll)
       ' .FileName = "Datei.gif"
 
       ' Filter
       .Filter = TextBox2.Text
        ' boolsche Abfrage ob Mehrfachauswahl zulässig
       .Multiselect = Not ChkEinzel.Checked

        ' Zeile ruft den Dialog auf, weitere Ausführung nur bei
        ' Resultat OK:
       If .ShowDialog = Windows.Forms.DialogResult.OK Then
         If ChkEinzel.Checked = True Then
           ' Bei Einzelauswahl wertet man .FileName aus
           txt = .FileName & vbNewLine

         Else
            ' Bei möglicher Multiselektion wertet man
            ' das Array .FileNames aus
           For Each filename As String In .FileNames
             txt &= filename & vbNewLine
           Next
         End If
          ' Welcher Filter wurde verwendet?
         Dim idx As Integer = .FilterIndex
         txt &= "FilterIndex: " & idx.ToString & vbNewLine
         txt &= "Gewählter Filter: " & FilterDescription(.Filter, _
                idx) & vbNewLine
         txt &= "Multiselect: " & .Multiselect.ToString
       Else
         txt = "Abbruch durch Benutzer"
       End If
     End With
    End Using
    TextBox1.Text = txt
  End Sub

  Private Sub Button2_Click(ByVal sender As Object, ByVal e As _
          EventArgs) Handles Button2.Click
    ' ### SaveFileDialog ###
    Dim txt As String
    Using sfd As New SaveFileDialog

    With sfd
       ' Ordnervorschlag
      .InitialDirectory = Pfad
      .Title = "Eingabe Datei zum speichern (Es wird hier nicht "_
               "wirklich überschrieben)"
       ' Dateivorschlag
      .FileName = "Datei.gif"
       ' Filter
      .Filter = TextBox2.Text

       ' Zeile ruft den Dialog auf, weitere Ausführung nur bei
       ' Resultat OK:
      If .ShowDialog = Windows.Forms.DialogResult.OK Then
        txt = .FileName & vbNewLine

        ' Welcher Filter wurde verwendet?
        Dim idx As Integer = .FilterIndex
        txt &= "FilterIndex: " & idx.ToString & vbNewLine
        txt &= "Gewählter Filter: " & FilterDescription(.Filter, _
            idx)
      Else
        txt = "Abbruch durch Benutzer"
      End If
    End With
    End Using
    TextBox1.Text = txt
  End Sub

  Private Sub Button3_Click(ByVal sender As Object, ByVal e As _
          EventArgs) Handles Button3.Click
    ' ### FolderBrowserDialog ###
    Dim txt As String
    Using fbd As New FolderBrowserDialog
    With fbd
       ' Ordnervorschlag
      .SelectedPath = "c:\"
       ' RootFolder verwendet man nur zum Eingrenzen auf eine _
       ' bestimmte Ordnerebene
       ' z.B.: .RootFolder = Environment.SpecialFolder.MyPictures

      .Description = "Bitte einen Ordner für die (fiktive) "_
                     "Sicherung auswählen."
       ' Button "Neuen Ordner erstellen" anzeigen
      .ShowNewFolderButton = True

       ' Zeile ruft den Dialog auf, weitere Ausführung nur bei
       ' Resultat OK:

      If .ShowDialog = Windows.Forms.DialogResult.OK Then
        txt = "Gewählter Ordner: " & .SelectedPath
      Else
        txt = "Abbruch durch Benutzer"
      End If
    End With
    End Using
    TextBox1.Text = txt
  End Sub

  Private Sub Button4_Click(ByVal sender As Object, ByVal e As _
          EventArgs) Handles Button4.Click
    ' Applikation beenden
    Me.Close()
  End Sub

  Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As _
          Object, ByVal e As EventArgs) _
          Handles ComboBox1.SelectedIndexChanged
    Dim strFilter As String
    Select Case ComboBox1.SelectedIndex
      Case 0
         ' Einfacher Filter
        strFilter = "Gif Bilddateien|*.gif"
      Case 1
         ' Erweiterter Filter
        strFilter = "JPEG Bilddateien|*.jpg|Gif Bilddateien|*.gif"_
                    "|Alle Dateien|*.*"
      Case Else
         ' Mehrere Dateierweiterungen in einer Auswahl
        strFilter = "Alle Bilddateien|*.jpg; *.jpeg; *.bmp; *.gif"_
                    ", *.tif|Alle Dateien|*.*"
      End Select

    TextBox2.Text = strFilter
  End Sub

  Private Function FilterDescription(ByVal Filter As String, _
          ByVal Index As Integer) As String
     ' erstellt aus dem Filterstring die Bezeichnung
    Dim strArr() As String = Split(Filter, "|"), _
        MyList As New List(Of String)
    For i As Integer = 0 To strArr.GetUpperBound(0)
      If (i Mod 2 = 0) Then MyList.Add(strArr(i))
    Next
      Return MyList(Index - 1)
  End Function
End Class
 
Weitere Links zum Thema
Eingabeformular mit ShowDialog aufrufen
OpenFileDialog-Steuerelement zur Dateiauswahl

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (13 kB) Downloads bisher: [ 249 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Donnerstag, 31 Mai 2012