|
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
| |
|
|
|
Windows-Version |
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
|
Download (13
kB)
|
Downloads bisher: [ 340 ]
|
|
|