Пример #1
0
        private void SetPropertiesFromDialogResult(NativeFolderBrowserDialog dialog)
        {
            dialog.GetResults(out IShellItemArray resultsArray);

            DirectoryNames.Clear();

            resultsArray.GetCount(out uint count);
            for (uint i = 0; i < count; i++)
            {
                resultsArray.GetItemAt(i, out IShellItem result);

                HResult hr = result.GetDisplayName(NativeMethods.SIGDN.SIGDN_DESKTOPABSOLUTEPARSING, out IntPtr ppszName);

                if (hr == HResult.Ok && ppszName != IntPtr.Zero)
                {
                    DirectoryNames.Add(Marshal.PtrToStringAuto(ppszName));
                }

                Marshal.FreeCoTaskMem(ppszName);
            }

            if (DirectoryNames.Count > 0)
            {
                DirectoryName = DirectoryNames[0];
            }
        }
Пример #2
0
        public DialogResult ShowDialog()
        {
            DialogResult result;

            // Windows Vista is version 6.0
            if (Environment.OSVersion.Platform == PlatformID.Win32NT &&
                Environment.OSVersion.Version >= new Version(6, 0))
            {
                using var d = new VistaFolderBrowserDialog { InitialDirectory = InitialDirectory, MultiSelect = true };

                if (d.ShowDialog() == DialogResult.OK)
                {
                    DirectoryName = d.DirectoryName;
                    DirectoryNames.Clear();
                    foreach (string dir in d.DirectoryNames)
                    {
                        DirectoryNames.Add(dir);
                    }
                    result = DialogResult.OK;
                }
                else
                {
                    result = DialogResult.Cancel;
                }
            }
            else
            {
                // Fallback for pre-Vista, probably won't ever be hit seeing as we require Windows 7 or above,
                // and even if we went back to .NET 4.6 we would still require Vista. But hey.
                using var d = new FolderBrowserDialog { SelectedPath = InitialDirectory, ShowNewFolderButton = true };

                if (d.ShowDialog() == DialogResult.OK)
                {
                    DirectoryName = d.SelectedPath;
                    DirectoryNames.Clear();
                    DirectoryNames.Add(d.SelectedPath);
                    result = DialogResult.OK;
                }
                else
                {
                    result = DialogResult.Cancel;
                }
            }

            return(result);
        }
Пример #3
0
 private void clearPaths()
 {
     Paths.Clear();
     DirectoryNames.Clear();
 }