CFileDialog automatisch Dateiendung anhängen



  • Also ich erstelle einen "Speichern unter" Dialog mittels CFileDialog. Nun kann man ja in das Eingabefeld einen Dateinamen eingeben. Aus dem Kombinationsfeld kann man die dazugehörige Dateiendung (Dateityp) auswählen. Wie kann ich es machen, dass die Dateiendung automatisch an den Dateinamen angehängt wird während der FileDialog noch geöffnet ist (Das Anhängen darf nur geschehen wenn der Benutzer eine Dateiendung aus dem Kombinationsfeld auswählt). Sollte beim Schließen keine Dateiendung von Hand eigegeben worden sein, so soll die gerade im Kombinationsfeld ausgewählte Endung angehängt werden. Wie kann ich diese Funktionalität erreichen (Quellcodebeispiele währen nicht schlecht).



  • Hat denn keiner ne Ahnung wie man so was realisieren könnte? Der FileDialog soll doch nur die gleiche Funktionalität wie der eines Standartprogrammes (z.B. MS Word) haben, ohne dass ich dafür nen eigenen FileDialog schreiben muss.



  • Na du kannst doch wenn dein Speichern-Dialog geschlossen wurde, den CString mit dem Dateinamen auswerten ob schon eine Endung dran hängt und falls das nicht der Fall ist einfach noch die passende Endung anhängen.
    Also 'ne vorgefertigte Lösung hab ich dafür noch nie gesehen.

    Gruß,
    Phips!



  • Nee das will ich ja eben nicht. Den Dateinamen musst du nicht mal von Hand auswerten, denn genau dafür gibt es ne Möglichkeit, wo du nen Dafaultwert setzten kannst. Ich will die Dateiendung aber zur Laufzeit des FileDialoges ändern (also bei Änderung des Kombinationsfeldes soll die gewählte Dateiendung an den Dateinamen im Edit-Feld angehängt werden).



  • Wie wär es so?

    CString anhang;  
    anhang= ".xls" // dein gewollter suffix
    
    if (strDateiame[strlen(strDateiame)-4] != ".") // ist kein suffix vorhanden
      strDateiame =strDateiame + anhang;
    


  • Das will ich ja eben nicht. Das Anhängen der Dateiendung soll im FileDialog (in der editbox --> wo man den Dateinamen reinschreibt) geschehen und nicht erst nach beenden des FileDialoges. Trotzdem danke für die Antworten



  • Laut MSDN gibt es im CFileDialog das Ereignis OnTypeChange. Abfangen, auswerten und Dateinamen korrigieren. Sollte eigentlich möglich sein.

    Gruß,
    Phips!



  • Ja genau, das ist was ich gesucht habe. Jetzt habe ich nur noch die Frage wie ich an die Editbox komme um dort die dateiendung zu setzten?



  • Ich fange jetzt das OnTypeChange Ereigniss ab. Jetzt ist jedoch mein Problem, dass dieses Ereigniss beim ändern des kontrollfeldes 2 mal ausgelöst wird. Woran liegt das und wie kann man es umgehen, so dass ich nur ein Ereigniss habe?



  • Hast Du denn schon raus wie man das Edit-Feld anspricht?

    Phips!



  • Nein, ich mache es jetzt doch anders. Ich setze während das OnTypeChange Ereigniss ausgelöst wird nen Flag. Dann weiß ich ob es geändert wurde oder nicht und kann somit nach beenden des Dialoges reagieren (bei Auswahl "All Files" nichts machen, bei Auswahl "Excel" die richtige Endung je nach Bedarf anhängen). Jetzt habe ich allerdings das Problem, dass das Event 2 mal ausgelöst wird und deshalb die Frage: Wie kann man das umgehen (das 2. Auslösen des Events)?
    Wenn noch einer ne Lösung hat, wie man auf das Editfeld zugreift immer her damit. Währe auf jeden fall mal interessant zu wissen.



  • Schau dir mal das an.

    Vielleicht hilfts dir weiter!

    Gruß,
    Phips!



  • Perfekt!!!!
    Das ist doch genau das, was ich die ganze zeit schon wissen wollte 🙂
    Thx für die Antworten.

    mfg Rekursiv


Anmelden zum Antworten