फ़ोल्डर ब्राउज़र संवाद प्रारंभ स्थान सेट करें


113

क्या एक फ़ोल्डर ब्राउज़र संवाद की प्रारंभिक निर्देशिका को गैर-विशेष फ़ोल्डर में सेट करने का कोई तरीका है? यह वही है जो मैं वर्तमान में उपयोग कर रहा हूं

fdbLocation.RootFolder = Environment.SpecialFolder.Desktop;
लेकिन मैं एक पथ का उपयोग करना चाहता हूं जिसे मैंने कुछ इस तरह से स्ट्रिंग में संग्रहीत किया है
fdbLocation.RootFolder = myFolder;
यह "System.Environment.SpecialFolder 'में" स्ट्रिंग को परिवर्तित नहीं कर सकता "एक त्रुटि का कारण बनता है।

जवाबों:


188

ShowDialog पर कॉल करने से पहले केवल चयनित संपत्ति सेट करें।

fdbLocation.SelectedPath = myFolder;

20
ध्यान दें कि इसे सेट RootFolderकरना आवश्यक है Environment.SpecialFolder.Desktopया यह काम नहीं कर सकता है।
21-30 को माइक लोरी

3
नीचे दिए गए चाड अनुदान देखें: उन्होंने ठीक ही बताया कि RootFolder सेट किया जाना चाहिए, और SelectPath काम करने के लिए उस RootFolder के नीचे होना चाहिए ।
डॉ। स्नूज़

3
यह मेरे लिए काम करता है लेकिन यह फ़ोल्डर पर ध्यान केंद्रित नहीं करता है। मुझे मैन्युअल रूप से नीचे स्क्रॉल करना होगा और उस फ़ोल्डर को ढूंढना होगा जिसे वह डिफ़ॉल्ट रूप से देखता है। क्या यह दिखाए जाने पर स्वचालित रूप से फ़ोकस सेट करने का एक तरीका है?
जोबैक्सटर

2
हालाँकि यह सेटिंग के समान नहीं है RootFolder। यदि RootFolderसेट किया गया है, तो केवल निर्दिष्ट फ़ोल्डर और इसके नीचे स्थित कोई सबफ़ोल्डर संवाद बॉक्स में दिखाई देगा। SelectedPathकेवल दिए गए मार्ग का पूर्व चयन करता है।
Jan Gassen

30

ShowDialog को कॉल करने से पहले चयनित संपत्ति को सेट करें ...

folderBrowserDialog1.SelectedPath = @"c:\temp\";
folderBrowserDialog1.ShowDialog();

C: \ Temp पर उन्हें प्रारंभ करेंगे


RootFolder ( SelectedPath is set to an absolute path that is a subfolder of RootFolder) सेट करने के लिए आवश्यक है ? व्यवहार यह है: Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)रिटर्न C: \ Users \ Myusername \ Desktop। प्रतिरूपण कोड का उपयोग करना (LogonType LOGON32_LOGON_INTERACTIVE के साथ) खाली स्ट्रिंग
Kiquenet

24
fldrDialog.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)

"यदि चयनित बॉक्स को डायलॉग बॉक्स दिखाने से पहले चयनित किया गया है, तो इस पथ वाला फ़ोल्डर चयनित फ़ोल्डर होगा, जब तक चयनितपथ एक निरपेक्ष पथ पर सेट हो जाता है जो रूटफ़ॉल्डर का सबफ़ोल्डर है (या अधिक सटीक रूप से, सबफ़ोल्डर को इंगित करता है) शेल नेमस्पेस का प्रतिनिधित्व रूटफोलर द्वारा किया गया)। "

MSDN - चयनितपाठ

"GetFolderPath विधि इस गणना से जुड़े स्थानों को लौटाती है। इन फ़ोल्डरों के स्थानों में अलग-अलग ऑपरेटिंग सिस्टम पर अलग-अलग मूल्य हो सकते हैं, उपयोगकर्ता कुछ स्थानों को बदल सकते हैं, और स्थान स्थानीय हैं।"

पुन: डेस्कटॉप बनाम डेस्कटॉपडायरेक्टरी

डेस्कटॉप

"भौतिक फ़ाइल सिस्टम स्थान के बजाय तार्किक डेस्कटॉप।"

DesktopDirectory:

"निर्देशिका डेस्कटॉप पर फ़ाइल ऑब्जेक्ट्स को भौतिक रूप से संग्रहीत करने के लिए उपयोग की जाती है। इस निर्देशिका को डेस्कटॉप फ़ोल्डर के साथ ही भ्रमित न करें, जो एक आभासी फ़ोल्डर है।"

MSDN - विशेष फ़ोल्डर Enum

MSDN - GetFolderPath


विशेष रास्तों के लिए आप {{fldrDialog.RootFolder = Environment.SpecialFolder.DesktopDirectory}} कर सकते हैं
5

उत्तम। धन्यवाद। कुंजी यह है कि यदि चयनित होता है, तो चयनित फ़ाइल को चयनित करने के लिए इंगित किया जाना है, तो चयनित रूट रूट फ़ोल्डर से नीचे होना चाहिए।
डॉ। स्नूज़

व्यवहार यह है: Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)रिटर्न C: \ Users \ Myusername \ Desktop। प्रतिरूपण कोड का उपयोग करना (LogonType LOGON32_LOGON_INTERACTIVE के साथ) खाली स्ट्रिंग
Kiquenet

9

निर्देशिका चयनित पथ को सेट करने और नई निर्देशिका प्राप्त करने के लिए:

dlgBrowseForLogDirectory.SelectedPath = m_LogDirectory;
if (dlgBrowseForLogDirectory.ShowDialog() == DialogResult.OK)
{
     txtLogDirectory.Text = dlgBrowseForLogDirectory.SelectedPath;
}

2

डॉटनेट- snippets.de पर मिला

प्रतिबिंब के साथ यह काम करता है और असली RootFolder सेट करता है !

using System;
using System.Reflection;
using System.Windows.Forms;

namespace YourNamespace
{
    public class RootFolderBrowserDialog
    {

        #region Public Properties

        /// <summary>
        ///   The description of the dialog.
        /// </summary>
        public string Description { get; set; } = "Chose folder...";

        /// <summary>
        ///   The ROOT path!
        /// </summary>
        public string RootPath { get; set; } = "";

        /// <summary>
        ///   The SelectedPath. Here is no initialization possible.
        /// </summary>
        public string SelectedPath { get; private set; } = "";

        #endregion Public Properties

        #region Public Methods

        /// <summary>
        ///   Shows the dialog...
        /// </summary>
        /// <returns>OK, if the user selected a folder or Cancel, if no folder is selected.</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 is 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;
                // maybe ensure that SelectedPath is set
                return DialogResult.OK;
            }
        }

        #endregion Public Methods

    }
}

किसी भी विचार कैसे पूर्व निर्धारित फ़ोल्डर आइटम का विस्तार और पतन करने के लिए?
गुडी

मैं उत्कीर्ण और इस जवाब की तरह है, लेकिन !! यह ध्यान दिया जाना चाहिए कि उपयोगकर्ता msdn: docs.microsoft.com/en-us/windows/win32/shell/… के अनुसार, इस रूट फ़ोल्डर के सेट से अधिक ब्राउज़ करने में सक्षम नहीं होगा । मेरे द्वारा उपयोग किया गया कार्य सरल है, डिफ़ॉल्ट .net FolderBrowser का उपयोग करें, विशेष फ़ोल्डर को MyComputer पर सेट करें, फिर चयनित पथ सेट करें। यह चयनित पथ निर्देशिका तक फ़ोल्डरों का विस्तार भी करेगा, लेकिन इसे स्क्रॉल नहीं करेगा।
हेरिबेटो लुगो

0

मेरे मामले में, यह एक आकस्मिक डबल भागने था।

यह काम:

SelectedPath = @"C:\Program Files\My Company\My product";

यह नहीं है:

SelectedPath = @"C:\\Program Files\\My Company\\My product";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.