OpenFileDialog - NUR Datei anzeigen

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Fortender.

    TomTheCoder15 schrieb:

    ​aber nicht den ganzen Pfad da stehen haben, sondern nur den Musik Titel

    Schwer zu interpretieren :D Meinst du, dass du nur den Dateinamen aus einem Pfad möchtest?
    Dann guck dir das mal an:
    msdn.microsoft.com/de-de/libra…etfilename(v=vs.110).aspx
    msdn.microsoft.com/de-de/libra…textension(v=vs.110).aspx
    Mfg
    Vincent

    Guten Morgen TomTheCoder15

    Versuchs mit einer Funktion. ZB. etwa so....

    VB.NET-Quellcode

    1. Shared Function OpenDialogEx(ByVal strDBFileName As String, _
    2. ByVal frmDlgOwner As Form, _
    3. Optional ByVal strFilterDTyp As String = Nothing, _
    4. Optional ByVal strDateiBez As String = Nothing) As String
    5. Dim FDlg As New OpenFileDialog
    6. If IsNothing(strFilterDTyp) Then strFilterDTyp = """...""" & " *."
    7. If IsNothing(strDateiBez) Then strDateiBez = "Datei *."
    8. With FDlg
    9. .CheckFileExists = True
    10. .InitialDirectory = .....
    11. .Filter = ....
    12. .Multiselect = False
    13. .FilterIndex = 0
    14. If .ShowDialog(frmDlgOwner) = Windows.Forms.DialogResult.OK Then
    15. ....
    16. Else ....
    17. End If
    18. .Dispose()
    19. End With
    20. End Function



    Freundliche Grüsse

    exc-jdbi
    Frei ausm Bauch raus würde ich solch eine Funktion coden:

    VB.NET-Quellcode

    1. Function getFileNameWithoutExtension(ByVal fInfo As FileInfo) As String
    2. Return If(fInfo.Extension <> String.Empty, fInfo.Name.Substring(0, fInfo.Name.LastIndexOf(fInfo.Extension)), fInfo.Name)
    3. End Function


    Edit:
    Man müsste die Funktion noch so abändern, dass es bei Dateien mit keiner Extension nicht zu Randeffekten kommt.
    Hab ich jetzt mal abgeändert. Wie VincentTB schon gesagt hat gibts da schon ne eigene Funktion. Demnach unnötig.
    ​Path.GetFileNameWithoutExtension

    MfG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fortender“ ()

    @VincentTB
    Die Funktion hab ich nicht mehr gefunden. Wusste die Klasse nicht mehr. Dankeschön. Ja hast Recht war schon am editieren :P
    Es wird auch keinen Fehler zurückgeben. Aber es kommt zu Randeffekten. Die Extension ist dann leer und es würde immer
    das letzte Zeichen des Namens verschluckt werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fortender“ ()

    Das Problem ist halt, dass der Dateiname nicht immer dem Titel des Liedes entspricht.
    Also wenn du sichergehen willst, dass in der ListBox nur die Namen der Lieder stehen, würde ich es
    vorziehen auch wirklich nur diese auszulesen :D Wie das geht findest du über die SuFu.

    TomTheCoder15 schrieb:

    in einer Listbox nur der Titel von dem Lied steht und nicht der Pfad.
    Wenn Du die Information hast, schmeiß sie nicht weg, sondern nutze sie, nutze die Fähigkeiten von .NET.
    Heute lernen wir die Property DisplayMember der ListBox, dazu übergeben wir ihr die FileInfo-Instanzen der selektierten Dateien:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using dlg = New OpenFileDialog
    4. dlg.Filter = "Musik|*.wav;*.mp3|Alle Dateien|*.*"
    5. dlg.Multiselect = True
    6. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    7. Return
    8. End If
    9. Dim ll = New List(Of IO.FileInfo)
    10. For Each file In dlg.FileNames
    11. ' Dateinamen mit Pfad in FileInfo konvertieren
    12. ll.Add(New IO.FileInfo(file))
    13. Next
    14. ' an die Listbox binden
    15. Me.ListBox1.DataSource = ll
    16. End Using
    17. ' das richtige anzeigen
    18. Me.CheckBox1_CheckedChanged(CheckBox1, EventArgs.Empty)
    19. End Sub
    20. Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
    21. ' die gewählte Property anzeigen
    22. If CheckBox1.Checked Then
    23. Me.ListBox1.DisplayMember = "Name"
    24. Else
    25. Me.ListBox1.DisplayMember = "FullName"
    26. End If
    27. End Sub
    28. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. function GetFile as string
    2. dim m_openFile as new OpenFileDialog()
    3. with m_openFile
    4. .AutoUpgradeEnabled = true
    5. .CheckFileExists = true
    6. .CheckPathExists = true
    7. .Filter = "MP3 Files|*.mp3|All Files|*.*"
    8. .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Documents)
    9. .Title = "Choose your Music"
    10. end with
    11. m_openFile.ShowDialog(me)
    12. return m_openFile.SafeFileName
    13. end function
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln

    VB.NET-Quellcode

    1. Function chooseFile(parentForm As Form) As FileInfo
    2. Using ofd As New OpenFileDialog With {.AutoUpgradeEnabled = True, .CheckFileExists = True, _
    3. .CheckPathExists = True, .Filter = "MP3 Files(*.mp3)|*.mp3", _
    4. .InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), _
    5. .Title = "Choose your music"}
    6. If ofd.ShowDialog(parentForm) = DialogResult.OK Then
    7. Return New FileInfo(ofd.FileName)
    8. Else
    9. Return Nothing
    10. End If
    11. End Using
    12. End Function

    @BeatsleigherXDA
    Ich erlaube mir mal deinem Code zu verbessern :D
    Ich finde es praktisch, wenn die Funktion direkt eine FileInfo-Klasse returned, da hat man direkt "alle" Informationen zur Datei mit bei. Was würde bei deinem Code passieren, wenn der Dialog nicht mit OK oder gleichem abgeschlossen werden würde? Das muss man behandeln. Den Rest hab ich einfach stylistisch bisschen angepasst.

    Hab den Code ausm Kopf geschrieben, deshalb dürfen Fehler ausgebessert und/oder behalten werden.

    MfG Tim

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fortender“ ()

    ich nutze immer den Designer, also ziehe einen OFD aufs Form und richte den ein.
    Hat den Vorteil, dass wenn man ihn mehrmals benutzt, dasser dann auf dem Ordner öffnet, wo man bereits die letzte Datei raus gewählt hat.

    Ausserdem braucht man keine weiteren Variablen, um das Ergebnis zu speichern - merkt sich ja der OFD.

    Eine Extra-Funktion zum Wählen einer Datei wird dadurch üflüssig.

    Ach guck - ist hier ja auch gezeigt: Keine Strings in die File-Listbox!

    ErfinderDesRades schrieb:

    Hat den Vorteil, dass wenn man ihn mehrmals benutzt, dasser dann auf dem Ordner öffnet, wo man bereits die letzte Datei raus gewählt hat.
    Nö.
    Das macht der im Using erzeugte OFD ebenfalls.
    Falls Du an mehreren Stellen einen OFD benötigst, gehe ich davon aus, dass verschiedene Properties gesetzt werden, sonst bräuchtest Du nicht mehrere Stellen. Da musst Du höllisch aufpassen, dass Du bei jedem Aufruf die Properties korrekt setzt, sonst sind die des anderen Aufrufs aktuell.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Fortender schrieb:

    VB.NET-Quellcode

    1. Function chooseFile(parentForm As Form) As FileInfo
    2. Using ofd As New OpenFileDialog With _
    3. {.AutoUpgradeEnabled = True, .CheckFileExists = True, .CheckPathExists = True, .Filter = "MP3 Files(*.mp3)|*.mp3", .InitialDirectory = Environments.GetFolderPath(Environment.SpecialDirectories.Music), .Title = "Choose your music"}
    4. If ofd.ShowDialog(parentForm) = DialogResult.OK Then Return New FileInfo(ofd.FileName)
    5. End Using
    6. Return Nothing
    7. End Function

    @BeatsleigherXDA
    Ich erlaube mir mal deinem Code zu verbessern :D


    Es sollte keine perfekte Lösung in dem Sinne sein, sondern ein Schritt in die richtige Richtung :p
    Dass da syntaktisch vieles nicht korrekt war - mein Fehler. Ich benutze VB nicht, weil es mir zu kompliziert ist (es macht alles einfach umständlich) :p
    "Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
    "Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln

    RodFromGermany schrieb:

    ErfinderDesRades schrieb:

    Hat den Vorteil, dass wenn man ihn mehrmals benutzt, dasser dann auf dem Ordner öffnet, wo man bereits die letzte Datei raus gewählt hat.
    Nö.
    Das macht der im Using erzeugte OFD ebenfalls.
    ah - interessant!
    Weil jetzt hab ich zuerst mittm FolderBrowserDialog getestet, der macht das nicht. Der OpenFileDialog aber doch.

    BeatsleigherXDA schrieb:

    Es sollte keine perfekte Lösung in dem Sinne sein, sondern ein Schritt in die richtige Richtung :p

    Schon klar :)
    Hab nochmal den Post bearbeitet, da ich die Einrückung und Übersicht ein wenig verkackt hab. Ist halt blöd das Ganze mit dem Handy
    zu schreiben und dann noch ohne Syntax-Highlighting und IntelliSense ausm Kopf.
    Ich wollte auch nicht hier ein Meisterwerk draus machen, sondern das was ich gesehen habe, nur ein wenig anpassen :D

    MfG