Hi@all
Hier möchte ich Euch zeigen wie Ihr den OpenFileDialog, SaveFileDialog, und PickFolderDialog (alle Single Select) per Interface IFileDialog verwenden könnt. Nun fragen sich wahrscheinlich alle, warum sollte ich diese Dialoge vom Interface IFileDialog verwenden? Die entsprechenden Controls bzw. Klassen zu den im Framework vorhandenen Dialogen verwenden APIs (GetOpenFileName, GetSaveFileName und SHBrowseForFolder), die laut Microsoft ab Windows Vista nicht mehr verwendet werden sollten! Dies ist auch so in der Microsoft Doku zu den APIs zu lesen.
Die Dialoge vom Interface IFileDialog sind moderner und flexibler als die alten Dialoge per API. Die neuen Dialoge lassen sich ganz einfach mit weiteren Controls erweitern (Customize), Standard Controls anpassen (Caption), und es stehen diverse Events zu Verfügung. Die Bilder zeigen ein paar Dialoge (Customized und Standard). Dieses Beispiel zeigt auch nur Single Select Dialoge. Also man kann nur eine Datei im OpenFileDialog auswählen. Für Multi Select beim OpenFileDialog müsste man das Interface IFileOpenDialog, anstatt IFileDialog oder IFileDialog2, verwenden. Dieses stellt eine Funktion GetResults zur Verfügung das ein Interface IShellItemArray zurückliefert über das man dann auf die einzelnen IShellItem zugreifen kann um an die Namen der Dateien zu kommen. Es gibt noch das Interface IFileSaveDialog. Das stellt noch ein paar weitere Funktionen bereit die man für das Speichern von einer Datei evtl. brauchen könnte. Die Interfaces IFileOpenDialog, IFileSaveDialog und IShellItemArray sind in diesen Beispiel aber nicht vorhanden und können ja selbst eingebaut werden. Was ich noch eingebaut habe, ist eine Sub über die man das FensterHandle des Dialoges ermitteln kann. Mit dem FensterHandle könnte man nun den Dialog Subclassen, die Controls auf dem Dialog enumerieren und diese ebenfalls Subclassen/Manipulieren falls man das möchte. Ein praktisches Beispiel für die neuen Dialoge wäre zB. der PickFolderDialog_Locked. Das ganze ist so programmiert, das ein ausgewählter Ordner nicht verlassen werden kann. Es kann nur der Ordner selber und deren Unterordner besucht und ausgewählt werden. Kann man natürlich auch auf einen OpenFile- oder SaveFileDialog übertragen.
Das ganze ist wie immer eher Testcode und soll nur zeigen wie es funktioniert. Wie immer werden keine extra Verweise usw. verwendet.
Hier möchte ich Euch zeigen wie Ihr den OpenFileDialog, SaveFileDialog, und PickFolderDialog (alle Single Select) per Interface IFileDialog verwenden könnt. Nun fragen sich wahrscheinlich alle, warum sollte ich diese Dialoge vom Interface IFileDialog verwenden? Die entsprechenden Controls bzw. Klassen zu den im Framework vorhandenen Dialogen verwenden APIs (GetOpenFileName, GetSaveFileName und SHBrowseForFolder), die laut Microsoft ab Windows Vista nicht mehr verwendet werden sollten! Dies ist auch so in der Microsoft Doku zu den APIs zu lesen.
Die Dialoge vom Interface IFileDialog sind moderner und flexibler als die alten Dialoge per API. Die neuen Dialoge lassen sich ganz einfach mit weiteren Controls erweitern (Customize), Standard Controls anpassen (Caption), und es stehen diverse Events zu Verfügung. Die Bilder zeigen ein paar Dialoge (Customized und Standard). Dieses Beispiel zeigt auch nur Single Select Dialoge. Also man kann nur eine Datei im OpenFileDialog auswählen. Für Multi Select beim OpenFileDialog müsste man das Interface IFileOpenDialog, anstatt IFileDialog oder IFileDialog2, verwenden. Dieses stellt eine Funktion GetResults zur Verfügung das ein Interface IShellItemArray zurückliefert über das man dann auf die einzelnen IShellItem zugreifen kann um an die Namen der Dateien zu kommen. Es gibt noch das Interface IFileSaveDialog. Das stellt noch ein paar weitere Funktionen bereit die man für das Speichern von einer Datei evtl. brauchen könnte. Die Interfaces IFileOpenDialog, IFileSaveDialog und IShellItemArray sind in diesen Beispiel aber nicht vorhanden und können ja selbst eingebaut werden. Was ich noch eingebaut habe, ist eine Sub über die man das FensterHandle des Dialoges ermitteln kann. Mit dem FensterHandle könnte man nun den Dialog Subclassen, die Controls auf dem Dialog enumerieren und diese ebenfalls Subclassen/Manipulieren falls man das möchte. Ein praktisches Beispiel für die neuen Dialoge wäre zB. der PickFolderDialog_Locked. Das ganze ist so programmiert, das ein ausgewählter Ordner nicht verlassen werden kann. Es kann nur der Ordner selber und deren Unterordner besucht und ausgewählt werden. Kann man natürlich auch auf einen OpenFile- oder SaveFileDialog übertragen.
Das ganze ist wie immer eher Testcode und soll nur zeigen wie es funktioniert. Wie immer werden keine extra Verweise usw. verwendet.
Mfg -Franky-
Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „-Franky-“ ()