Feedback

C# - FolderBrowserDialog mit benutzerdefiniertem Root

Veröffentlicht von am 6/28/2013
(2 Bewertungen)
Der von mir schlicht FolderBrowserDialog2 genannte Dialog sieht absolut identisch wie der Standard-Dialog aus, aber bietet die Funktion den Root-Pfad benutzerdefiniert einzustellen. - Andere Einstellungsmöglichkeiten sind dafür eingeschränkt, aber erweiterbar.

string dir;
FolderBrowserDialog2 fbd = new FolderBrowserDialog2("Wählen Sie einen Unterordner.", "C:\Test");
if (fbd.ShowDialog() == Dialog.Result)
dir = fbd.SelectedPath;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace System.Windows.Forms
{
    /// <summary>
    /// Stellt einen Ordnerwahl-Dialog mit benutzerdefiniertem Root-Ordner bereit.
    /// </summary>
    class FolderBrowserDialog2
    {
        /// <summary>
        /// Erstellt eine neue Instanz des Dialogs.
        /// </summary>
        public FolderBrowserDialog2 ()
        {
        }

        /// <summary>
        /// Erstellt eine neue Instanz des Dialogs.
        /// </summary>
        /// <param name="Description">Die angezeigte Beschreibung des Dialogs.</param>
        /// <param name="RootPath">Das Basisverzeichnis für den Dialog.</param>
        public FolderBrowserDialog2(string Description, string RootPath)
        {
            this.Description = Description;
            this.RootPath = RootPath;
        }

        /// <summary>
        /// Die angezeigte Beschreibung des Dialogs.
        /// </summary>
        public string Description = "Chose folder...";
        /// <summary>
        /// Das Basisverzeichnis für den Dialog.
        /// </summary>
        public string RootPath = "";
        /// <summary>
        /// Gibt den gewählten Pfad zurück (inklusive Root). Keine Voreinstellung möglich.
        /// </summary>
        public string SelectedPath = "";

        /// <summary>
        /// Zeigt den Dialog mit den gewählten EInstellungen.
        /// </summary>
        /// <returns>Der gewählte Pfad.</returns>
        public DialogResult ShowDialog()
        {
            var shellType = Type.GetTypeFromProgID("Shell.Application");
            var shell = Activator.CreateInstance(shellType);
            var folder = shellType.InvokeMember("BrowseForFolder", BindingFlags.InvokeMethod, null, shell, new object[] { 0, Description, 0, RootPath, });
            if (folder == null)
                return DialogResult.Cancel;
            else
            {
                var folderSelf = folder.GetType().InvokeMember("Self", BindingFlags.GetProperty, null, folder, null);
                SelectedPath = folderSelf.GetType().InvokeMember("Path", BindingFlags.GetProperty, null, folderSelf, null) as string;
                return DialogResult.OK;
            }
        }
    }
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!