OpenFileDialog, SaveFileDialog "Weitere Optionen" voreinstellen

    • VB.NET

      OpenFileDialog, SaveFileDialog "Weitere Optionen" voreinstellen

      Ausgehend von diesem Thread möchte ich das Resultat hier veröffentlichen.
      Mit Zuarbeiten von @VB1963: und @Derfuhr: habe ich dieses CodeProject (XP) für W7 (und hoffentlich höher) überarbeitet.
      Problem:
      Die Weitere Optionen-Einstellung wird für den einen Dialog so angezeigt, wie sie vom letzten Dialog voreingestellt wurde.
      Ziel:
      Die Weitere Optionen-Einstellung soll voreinstellbar sein, wenn z.B. Textdateien geladen und Bilddateien gespeichert werden sollen.

      Funktionsweise:
      Die WndProc()-Funktion des aufrufenden Fensters wird überladen, in ihr wird die WndProc-Prozedur in der FileDialogExtender-Klasse aufgerufen (dieser Namer ist willkürlich).
      Im zu öffnenden FileDialog wird dann vor dessen Sichtbarwerden die Voreinstellung vorgenommen:
      1. In der WndProc-Prozedur der FileDialogExtender-Klasse wird nur die NOTIFY-Message ausgewertet:

        VB.NET-Quellcode

        1. If m.Msg = &H121 Then

      2. Es werden alle ChildWindows aufgelistet:

        VB.NET-Quellcode

        1. Dim hwnds As IntPtr() = GetChildWindows(hWndDlg)

      3. Das entsprechende Control wird identifiziert:

        VB.NET-Quellcode

        1. If FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_Defview", "ShellView") <> IntPtr.Zero Then

      4. und es wird die Voreinstellung vorgenommen:

        VB.NET-Quellcode

        1. SendMessage(hWndDlg, WM_COMMAND, CUInt(DialogViewType), 0)

      5. Das letzte Handle wird sich gemerkt, damit die Prozedur zwei Mal aufgerugen werden muss (z.B. bei einem FileDialog-Member)
      Anbei die 2010er Projekte für VB und CS:
      FileDialogExtender_VB.zip
      FileDialogExtender_CS.zip
      ------
      Edit:
      1. Sowohl Using als auch Member-Variablen für Open- und Save-Dialog
      2. static / NotInheritable Class FileDialogExtender
      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!

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RodFromGermany“ () aus folgendem Grund: Quellen überarbeitet