OpenDialog Initial Directory Problem



  • OldMan00 schrieb:

    [...] nur wenn ich vorher den OpenDialog schon mal geöffnet hatte, nicht mehr.

    Arbeitsverzeichnis geändert!?
    Was gibt GetCurrentDir zurück?

    ShowMessage(OpenDialog->InitialDir);
      Caption = GetCurrentDir();
      if(OpenDialog->Execute())
        ...
    

    InitialDir wird nur nur beim allerersten Aufruf des Dialogs ausgewertet.



  • Jansen schrieb:

    InitialDir wird nur nur beim allerersten Aufruf des Dialogs ausgewertet.

    ah, dann ist es ja nur normal. Danke !
    gibt es eine andere Möglichkeit dies zu ändern ?

    Jansen schrieb:

    Arbeitsverzeichnis geändert!?

    natürlich, deswegen ist es ja so. Hatte aber auch probiert das Arbeitsverzeichnis und den InitialDir gleichermaßen zu ändern. Welche Möglichkeit habe ich dann dieses Problem zu lösen ?



  • Ich verstehe nicht wirklich, was dein Problem eigentlich ist.
    Wenn du bei jedem Aufruf des Dialog im selben Verzeichnis starten willst dann musst du vorher das Arbeitsverzeichnis entsprechend setzen. Oder du erstellst den OpenDialog bei jedem Aufruf dynamisch zur Laufzeit neu (und löschst ihn anschliessend gleich wieder), dann sollte jedesmal das InitialDir gelten.

    Allerdings widerspricht der Ansatz m.E. etablierten GUI-Richtlinien; der Anwender erwartet üblicherweise, dass ein Datei-Dialog sich beim wiederholten Aufruf das letzte Verzeichnis "merkt".



  • Jansen schrieb:

    Ich verstehe nicht wirklich, was dein Problem eigentlich ist.

    Das Problem besteht darin, daß ich durch eine Option (Schalter) zwischen zwei verschiedenen Verzeichnissen hin und her schalten möchte und nicht immer per Hand zwei vielleicht weit auseinanderliegende Verzeichnisse suchen muß. (kann sehr nervig sein) und ich dachte das mit InitialDir verwirklichen zu können. (ohne mehrere OpenDiologe auf die Form zu setzen.) Es muß doch irgendwie ne Möglichkeit geben OpenDialog zur Laufzeit anzuweisen in einem bestimmten Pfad zu öffnen und später dann auch zu wechseln.



  • Hallo

    Genau das macht doch InitialDir. Du must eben nach jedem Execute wie schon gezeigt den letzten Pfad auslesen und beim nächsten Open wieder InitialDir zuweisen. Wenn du dann zwei verschiedene methodenübergreifende Zwischenspeicher für je einen logischen OpenDialog nimmst, kannst du jeden logischen OpenDialog auch immer ein eigenes InitialDir zuweisen.

    bis bald
    akari



  • Ich weiß jetzt zwar nicht, ob wir aneinander vorbei reden, aber deshalb frage ich ja, da ich auch dachte InitialDir macht das. Es macht es aber nicht, auch nicht wenn ich vornweg mit SetCurrentDir(xxx) und InitialDir das Verzeichnis setze.



  • akari schrieb:

    Du must eben nach jedem Execute wie schon gezeigt den letzten Pfad auslesen und beim nächsten Open wieder InitialDir zuweisen.

    Wie schon gesagt, meinen Tests zufolge wird InitialDir im Programmverlauf nur ein einziges Mal ausgewertet, eben beim ersten Aufruf des Dialogs. Anschliessend kommt nur noch das CurrentDir zum Zug.

    Ich habe gerade noch mit TOpenDialog::Options::ofNoChange herumprobiert, aber das scheint keine Wirkung zu haben.

    Edit:
    Hmmm, SetCurrentDir wird tatsächlich auch ignoriert. Und der zuletzt gewählte Pfad bleibt auch über einen Neustart des Programmes erhalten, also wird der wohl automatisch irgendwo in der Registry abgelegt werden.



  • Lösung: die FileName-Property zurücksetzen, dann wird auch das neue gesetzte InitialDir ausgewertet.



  • Jansen schrieb:

    Lösung: die FileName-Property zurücksetzen, dann wird auch das neue gesetzte InitialDir ausgewertet.

    👍 ok danke, hab es jetzt zwar noch nicht probiert, aber ich gehe davon aus, daß es funktionier.



  • funktioniert!! 👍 wieder etwas gelernt 🙂
    danke nochmals



  • OldMan00 schrieb:

    wieder etwas gelernt 🙂

    Ich auch. 🙂



  • Hallo,

    Man muß doch nur InitialDir vor Execute setzen (und das jedesmal, wenn sich das Verzeichnis ändern soll) und dann geht's :

    OpenDialog1->InitialDir = "C:\\";
    if (OpenDialog1->Execute())
    {
    
    }
    

    Nash



  • Nash schrieb:

    [...] dann geht's

    Eben nicht. Wenn FileName einen Wert enthält, dann wird InitialDir ignoriert.



  • Hallo,

    Oops... Tatsache...
    Das kommt davon, wenn man mal so nebenbei antwortet.
    Da ich FileName meistens gesetzt hatte (auf die gewünschte Datei), ist mir das nicht aufgefallen.

    Nash


Anmelden zum Antworten