OpenFileDialog

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    OpenFileDialog

    Ich habe einen OpenFileDialog in meiner Anwendung integriert und die InitialDirectory gefüllt. Ich bekomme aber beim .showDialog immer das Verzeichnis des letzten Aufrufes angezeigt. Ich kenne aber das neue erforderliche Verzeichnis und habe es auch gefüllt. Kann ich irgendwie den Wert beeinflußen, damit ich mir das Navigieren ersparen kann? Ich weiß ja, wo ich hin will.
    Danke für eure Ideen und Hilfe.
    @Normen Speichere nach dem Aufruf vom OFD den Pfad (ohne Dateinamen) ab.
    Setze einen Haltepunkt drauf und überzeuge Dich davon, dass die Belegung korrekt ist.
    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!
    Ist die OFD-RestoreDirectory-Property auf True? Dann auf False setzen!
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Hi

    Das Problem dürfte daher kommen das die entsprechenden Controls noch die veralteten APIs verwenden. Desweiteren gibt es auch unterschiedliche Verhalten was den InitialDir angeht. Schaust Du hier: docs.microsoft.com/de-de/windo…namea?redirectedfrom=MSDN -> Beschreibung zu lpstrInitialDir

    Ich bin schon lange von diesen Controls weg. MS selber schreibt das man die alten APIs für diese Dialoge ab WinVista nicht mehr verwenden sollte (bekannte Bugs usw.) und stattdessen die Dialoge vom Interface IFileDialog verwenden sollte.
    Mfg -Franky-
    Hallo,
    danke schon einmal für die Ideen. Habe ich alle bereits durchgespielt. Die Einträge sind korrekt. Ich nutze VS 2022 mit Framework 4.8. Das Control OFD ist eigentlich ganz praktisch, warum sollte ich es dann selbst entwickeln. Ich möchte nur, dass der Eintrag für InitialDirectory auch angewandt wird. Wo versteckt er sich und wie kann ich ihn evtl. vor dem Aufruf updaten - damit wäre mir ja schon geholfen. Ich kenne ja schon den Pfad, den ich nutzen will.

    Normen schrieb:

    Wo versteckt er sich und wie kann ich ihn evtl. vor dem Aufruf updaten
    Du ziehst den OFD aus dem Designer auf das GUI.
    Pack ihn doch mal in einen Using-Block, ohne den Designer-Dialog zu verwenden:

    VB.NET-Quellcode

    1. Using dlg = New OpenFileDialog
    2. dlg.InitialDirectory = "C;\Temp"
    3. If dlg.ShowDialog() <> DialogResult.OK Then Return
    4. ' was tun
    5. End Using
    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!

    Normen schrieb:

    habe ich gerade probiert - keine Änderung. Schade
    Poste mal Deinen Code.
    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!

    Quellcode

    1. str_PersPic = "#" + dbl_ID.ToString("000000")
    2. Using ofd1 = New OpenFileDialog
    3. ofd1.Filter = "Bild-Dateien|*.jpg;*.tif;*.bmp;*.jpeg"
    4. Dim str_PF As String = str_Pfad_Pic + "/" + str_PersPic
    5. ofd1.InitialDirectory = str_PF
    6. ofd1.Multiselect = False
    7. ofd1.RestoreDirectory = False
    8. If ofd1.ShowDialog = DialogResult.OK Then
    9. myStream = ofd1.OpenFile
    10. str_Path_1 = ofd1.FileName
    11. FileName = ofd1.FileName
    12. Call Pfad_Ermittlung()
    13. myStream.Close()
    14. ofd1.Dispose()
    15. Call Datei_Exists()
    16. File.Copy(str_Path_1, str_Path_2)
    17. Call Bild_Insert()
    18. Call Bilder_Load()
    19. Else
    20. Exit Sub
    21. End If
    22. End Using​
    @Normen Du hast das mehrfach explizit und implizit geschriebene ohne Dateinamen nicht beachtet:

    VB.NET-Quellcode

    1. ofd1.InitialDirectory = str_Pfad_Pic + "/"
    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!
    Nein,
    in str_PF steht genau der richtige Pfad. Auf das dort genannte Verzeichnis, resultierend aus der Personennummer, möchte ich zugreifen, aber ich bekomme immer nur das Verzeichnis angezeigt, dass ich beim letzten Mal durch navigieren genutzt habe.
    @Normen Ich hoffe mal, dass Dir Post #14 nicht durch die Lappen gegangen ist. ;)
    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!
    Nein, habe ich gemacht - Ergebnis: wie bisher.

    Übrigens: PersPic ist kein Dateiname, sondern ein Unterverzeichnis

    Beiträge zusammengefügt. ~Thunderbolt

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

    Normen schrieb:

    Nein,
    in str_PF steht genau der richtige Pfad. Auf das dort genannte Verzeichnis, resultierend aus der Personennummer, möchte ich zugreifen, aber ich bekomme immer nur das Verzeichnis angezeigt, dass ich beim letzten Mal durch navigieren genutzt habe.
    Wie gesagt: das kann nicht sein.
    Mach mal einen Haltepunkt rein, und vergewisser dich, dass der gezeigte Code durchlaufen wird.
    Was du sagst, kann nicht sein - der neue OFD, der dort erstellt wird, kann keine Informationen haben von einem anderen Navigier-Vorgang.

    Normen schrieb:

    Ergebnis: wie bisher.
    Ich habe mal Deinen Code so bearbeitet, dass er das tut, was er soll. Er tut nämlich genau das, was Du programmiert hast:

    VB.NET-Quellcode

    1. Dim str_Path_1 As String
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Using ofd1 = New OpenFileDialog
    4. ofd1.Filter = "Bild-Dateien|*.jpg;*.tif;*.bmp;*.jpeg"
    5. ofd1.InitialDirectory = str_Path_1
    6. If ofd1.ShowDialog <> DialogResult.OK Then
    7. Exit Sub
    8. End If
    9. str_Path_1 = System.IO.Path.GetDirectoryName(ofd1.FileName)
    10. End Using
    11. End Sub
    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!