दिलचस्प पोस्ट
मोबाइल एप्लिकेशन में ऑथ रहस्य कैसे 'टचस्टार्ट' और 'क्लिक करें' घटनाओं को बाध्य करें, लेकिन दोनों का जवाब नहीं है? फ्लोट / डबल वैल्यू निकालें OleDbException अनधिकृत था … UPDATE कथन में सिंटैक्स त्रुटि लिनक्स स्मृति प्रबंधन में आरएसएस और वीएसझेड क्या है विज़ुअल स्टूडियो में 'वेब साइट' और 'प्रोजेक्ट' के बीच का अंतर एसक्यूएल दो तालिकाओं से डेटा की तुलना करें imagecreatefrompng () पारदर्शी के बजाय एक काली पृष्ठभूमि बनाता है? NSString ऑब्जेक्ट की अधिकतम लंबाई क्या है? आदिम चर के आदिम प्रकार का निर्धारण कैसे करें? सी # वीर वर्ड के लिए VB.NET बराबर रीसाइक्वेव्यू में विज्ञापन एम्बेड करना "जावास्क्रिप्ट: शून्य (0);" बनाम "वापसी झूठी" बनाम "रोकथाम ()" क्लोनिंग के बिना जीआईटी रेपो में फाइलें ब्राउज़ करें और प्रदर्शित करें HttpsURLConnection का उपयोग करते समय एंड्रॉइड द्वारा सर्वर को भेजे गए सिफर सूची को ओवरराइड कैसे करें?

फ़ोल्डर्स का चयन करने के लिए आप एक OpenFileDialog को कॉन्फ़िगर कैसे करते हैं?

वी.एस.नेट में, जब आप किसी प्रोजेक्ट के लिए एक फ़ोल्डर का चयन कर रहे हों, तो एक संवाद जो कि ओपनफीलीडायलॉग या सेवफीलेडियलोग जैसा दिखता है, प्रदर्शित होता है, लेकिन केवल फ़ोल्डर्स को स्वीकार करने के लिए सेट किया गया है। जब से मैंने इसे देखा है तब से मुझे यह जानना है कि यह कैसे किया गया है। मैं FolderBrowserDialog से अवगत हूं, लेकिन मुझे कभी भी उस संवाद को पसंद नहीं आया। यह बहुत छोटा होता है और मुझे पथ का टाइप करने में सक्षम होने का लाभ नहीं देता।

मैं लगभग निश्चित है कि ऐसा करने के लिए एक तरीका नहीं है। NET से, लेकिन मैं उत्सुक हूं कि आप इसे अप्रबंधित कोड से कैसे करते हैं। खरोंच से संवाद को पूरी तरह से पुन: क्रियान्वित करने के लिए, इस व्यवहार के लिए संवाद को कैसे संशोधित करें?

मैं यह भी कहना चाहता हूं कि मैं FolderBrowserDialog से परिचित हूं, लेकिन कभी-कभी मुझे इसका उपयोग करना पसंद नहीं है, इस तरीके से एक डायलॉग को कॉन्फ़िगर करने के लिए वास्तव में उत्सुक होने के अलावा मुझे सिर्फ FolderBrowserDialog का उपयोग करने के लिए कहने पर मुझे एक सुसंगत UI अनुभव बनाए रखने में मदद मिलती है लेकिन मेरी जिज्ञासा को संतुष्ट नहीं करती है इसलिए यह उत्तर के रूप में नहीं गिना जाएगा।

यह विस्टा-विशिष्ट बात या तो नहीं है; मैं वीएस .नेट 2003 के बाद से इस संवाद को देख रहा हूं, इसलिए यह Win2k और WinXP में संभव है। यह एक "मैं यह करने के लिए सही तरीके से जानना चाहता हूं" प्रश्न से कम है और "मैं इसके बारे में उत्सुक रहा हूं क्योंकि जब मैं पहले वीएस 2003 में यह करना चाहता था" प्रश्न। मैं समझता हूं कि Vista के फ़ाइल संवाद में ऐसा करने का एक विकल्प है, लेकिन यह XP में काम कर रहा है, इसलिए मुझे पता है कि उन्हें काम करने के लिए कुछ किया है विस्टा-विशिष्ट उत्तर उत्तर नहीं हैं, क्योंकि विस्टा प्रश्न के संदर्भ में मौजूद नहीं है।

अपडेट: मैं स्कॉट विस्निव्स्की के जवाब को स्वीकार कर रहा हूं क्योंकि यह एक कामकाजी नमूना के साथ आता है, लेकिन मुझे लगता है कि सर्ज संवाद अनुकूलन (जो कि नेट से मान्य है, लेकिन यह काम करता है ) और मार्क रेणसम की ओर इशारा करने के लिए श्रेय के योग्य है। संभवत: इस कार्य के लिए एक कस्टम संवाद लुढ़का।

Solutions Collecting From Web of "फ़ोल्डर्स का चयन करने के लिए आप एक OpenFileDialog को कॉन्फ़िगर कैसे करते हैं?"

मेरे पास एक ऐसा संवाद है जिसे मैंने ओपनफाइल ऑरफोल्डर संवाद कहा था जो आपको एक फ़ोल्डर या फ़ाइल खोलने की अनुमति देता है

यदि आप इसके AcceptFiles मान को गलत मानते हैं, तो यह केवल फ़ोल्डर मोड को स्वीकार करता है।

आप यहां GitHub से स्रोत डाउनलोड कर सकते हैं

विंडोज़ एपीआई कोड पैक है इसमें CommonOpenFileDialog क्लास ( Microsoft.WindowsAPICodePack.Dialogs नामस्थान) में बहुत सारे शैल संबंधित सामग्री CommonOpenFileDialog । यह सही समाधान है – केवल खुले संवाद के साथ ही प्रदर्शित फ़ोल्डर्स।

यहां इसका उपयोग करने का एक उदाहरण दिया गया है:

 CommonOpenFileDialog cofd = new CommonOpenFileDialog(); cofd.IsFolderPicker = true; cofd.ShowDialog(); 

दुर्भाग्य से माइक्रोसॉफ्ट अब इस पैकेज को जहाज़ नहीं लेता है, लेकिन कई लोगों ने अनगॉफिश रूप से न्यूगेट को बायनेरिज़ अपलोड किया है एक उदाहरण यहां पाया जा सकता है । यह पैकेज केवल शेल-विशिष्ट सामान है आपको इसकी आवश्यकता होगी, उसी उपयोगकर्ता के पास कई अन्य पैकेज हैं जो मूल पैकेज में मौजूद अधिक कार्यक्षमता प्रदान करते हैं।

आप FolderBrowserDialogEx – का उपयोग कर सकते हैं एक अंतर्निहित FolderBrowserDialog का पुन: उपयोग करने योग्य व्युत्पन्न। यह एक आपको पथ में टाइप करने की अनुमति देता है, यहां तक ​​कि एक यूएनसी पथ भी। आप इसके साथ कंप्यूटर या प्रिंटर के लिए भी ब्राउज़ कर सकते हैं। बस में निर्मित एफबीडी की तरह काम करता है, लेकिन … बेहतर

(संपादित करें: मुझे यह ध्यान देना चाहिए था कि यह संवाद फाइल या फ़ोल्डर्स का चयन करने के लिए सेट किया जा सकता है।)

पूर्ण स्रोत कोड (एक छोटा सी # मॉड्यूल) मुक्त। एमएस-पब्लिक लाइसेंस

कोड का उपयोग करने के लिए:

 var dlg1 = new Ionic.Utils.FolderBrowserDialogEx(); dlg1.Description = "Select a folder to extract to:"; dlg1.ShowNewFolderButton = true; dlg1.ShowEditBox = true; //dlg1.NewStyle = false; dlg1.SelectedPath = txtExtractDirectory.Text; dlg1.ShowFullPathInEditBox = true; dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; // Show the FolderBrowserDialog. DialogResult result = dlg1.ShowDialog(); if (result == DialogResult.OK) { txtExtractDirectory.Text = dlg1.SelectedPath; } 

ओकिसी.डिलाओज पैकेज में नया (विस्टा-स्टाइल) फ़ोल्डर ब्राउज़र संवाद के आसपास एक प्रबंधित आवरण शामिल होता है। यह पुराने ऑपरेटिंग सिस्टम पर भी बेहद खराब है।

उस के लिए FolderBrowserDialog का उपयोग करने के लिए बेहतर है

 using (FolderBrowserDialog dlg = new FolderBrowserDialog()) { dlg.Description = "Select a folder"; if (dlg.ShowDialog() == DialogResult.OK) { MessageBox.Show("You selected: " + dlg.SelectedPath); } } 

खोज के कुछ घंटों के बाद मैंने लीट नाइटशैड द्वारा एक काम के समाधान के लिए यह जवाब मिला।

तीन चीजें हैं जो मुझे विश्वास है कि यह समाधान सभी दूसरों से बेहतर है।

  1. इसका उपयोग करना सरल है यह केवल आवश्यकता है कि आप अपनी परियोजना में दो फाइलें (जो कि किसी भी तरह एक साथ जोड़ दी जा सकती हैं) शामिल हैं
  2. यह मानक FolderBrowserDialog पर वापस आ जाता है जब XP या पुराने सिस्टम पर उपयोग किया जाता है।
  3. लेखक आपको किसी भी उद्देश्य के लिए कोड का उपयोग करने की अनुमति देता है जिसे आप उचित मानते हैं।

    इसमें कोई लाइसेंस नहीं है, जैसे कि आप कोड के साथ लेने के लिए स्वतंत्र हैं और आप क्या करेंगे।

यहां कोड डाउनलोड करें ।

ठीक है, मुझे पहले बिंदु को जोड़ने का प्रयास करने दें 😉 जासूस ++ या वाइन्स्पेक्टर के साथ थोड़ा सा बजाना दिखाता है कि वी.एस. प्रोजेक्ट स्थान में फ़ोल्डर पाठ बॉक्स मानक संवाद का एक अनुकूलन है। यह एक समान फ़ाइल नहीं है, जैसा कि फ़ाइल नाम टेक्स्टबॉक्स एक मानक फ़ाइल संवाद में जैसे कि नोटपैड में एक है।

वहां से, मैं समझता हूं, वी.एस. फ़ाइल नाम और फ़ाइल प्रकार पाठ बॉक्स / कंबोबॉक्स छुपाता है और संवाद के निचले भाग में अपने स्वयं के हिस्से को जोड़ने के लिए एक कस्टम संवाद टेम्पलेट का उपयोग करता है।

संपादित करें: इस तरह के अनुकूलन का एक उदाहरण है और इसे कैसे करें (Win32 में नहीं। नेट):

m_ofn OPENFILENAME संरचना है जो फ़ाइल संवाद को कम कर देता है। इन 2 लाइनें जोड़ें:

  m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILEDIALOG_IMPORTXLIFF); m_ofn.Flags |= OFN_ENABLETEMPLATE; 

जहां IDD_FILEDIALOG_IMPORTXLIFF एक कस्टम संवाद टेम्पलेट है जो संवाद के नीचे जोड़ा जाएगा। नीचे लाल रंग में हिस्सा देखें वैकल्पिक पाठ http://img.hiwab.com/windows/www.apptranslator.com

इस स्थिति में, कस्टमाइज़्ड पार्ट केवल एक लेबल + हाइपरलिंक है लेकिन यह कोई डायलॉग हो सकता है इसमें एक ओके बटन शामिल हो सकता है जो हमें फ़ोल्डर को केवल चयन के लिए मान्य करेगा।

लेकिन हम संवाद के मानक भाग में कुछ नियंत्रणों से कैसे छुटकारा पाएंगे, मुझे नहीं पता है।

इस एमएसडीएन लेख में और अधिक विस्तार

सटीक ऑडियो प्रतिलिपि इस तरह से Windows XP पर काम करता है मानक फ़ाइल खोलें संवाद दिखाया गया है, लेकिन फ़ाइल नाम फ़ील्ड में "फ़ाइल नाम पर ध्यान नहीं दिया जाएगा"

बस यहाँ अनुमान लगाया है, लेकिन मुझे संदेह है कि स्ट्रिंग को हर बार कॉम्बो बॉक्स संपादन नियंत्रण में इंजेक्शन दिया जाता है, जब भी संवाद में एक महत्वपूर्ण परिवर्तन किया जाता है। जब तक फ़ील्ड रिक्त नहीं है, और संवाद झंडे फ़ाइल की मौजूदगी की जांच नहीं करने के लिए सेट हैं, तो डायलॉग को सामान्य रूप से बंद किया जा सकता है।

संपादित करें: यह मैंने सोचा था कि यह बहुत आसान है। यहाँ कोड सी ++ / एमएफसी में है, आप इसे अपनी पसंद के पर्यावरण के लिए अनुवाद कर सकते हैं।

 CFileDialog dlg(true, NULL, "Filename will be ignored", OFN_HIDEREADONLY | OFN_NOVALIDATE | OFN_PATHMUSTEXIST | OFN_READONLY, NULL, this); dlg.DoModal(); 

2 संपादित करें: यह सी # के लिए अनुवाद होना चाहिए, लेकिन मैं सी # में धाराप्रवाह नहीं हूं इसलिए मुझे गोली मार न दें अगर यह काम न करे।

 OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.FileName = "Filename will be ignored"; openFileDialog1.CheckPathExists = true; openFileDialog1.ShowReadOnly = false; openFileDialog1.ReadOnlyChecked = true; openFileDialog1.CheckFileExists = false; openFileDialog1.ValidateNames = false; if(openFileDialog1.ShowDialog() == DialogResult.OK) { // openFileDialog1.FileName should contain the folder and a dummy filename } 

3 संपादित करें: अंत में वास्तविक स्टूडियो 2005 में मेरे विचार में वास्तविक संवाद को देखा, (मेरे पास इसके पहले तक पहुंच नहीं थी) यह मानक फ़ाइल खुला संवाद नहीं है! यदि आप जासूस ++ में खिड़कियों का निरीक्षण करते हैं और उनकी एक मानक फ़ाइल खोलते हैं, तो आप देखेंगे कि संरचना और वर्ग के नाम मेल नहीं खाते हैं। जब आप बारीकी से देखते हैं, तो आप संवाद की सामग्री के बीच कुछ अंतर भी देख सकते हैं। मेरा निष्कर्ष यह है कि माइक्रोसॉफ्ट ने पूरी तरह से विजुअल स्टूडियो में मानक संवाद को प्रतिस्थापित किया है ताकि इसे यह क्षमता दी जा सके। मेरा समाधान या ऐसा कुछ उतना ही करीब होगा जितना आप प्राप्त कर सकते हैं, जब तक कि आप स्क्रैच से अपना स्वयं का कोड तैयार न करें।

आप फ़ाइल संवाद subclass कर सकते हैं और अपने सभी नियंत्रणों तक पहुँच प्राप्त कर सकते हैं। प्रत्येक में एक पहचानकर्ता होता है जिसका उपयोग उसकी विंडो हैंडल प्राप्त करने के लिए किया जा सकता है आप तब उन्हें दिखा और छुप सकते हैं, उनके बारे में चयन परिवर्तन आदि के बारे में संदेश प्राप्त कर सकते हैं। यह सब निर्भर करता है कि आप कितना प्रयास करना चाहते हैं

हमने डब्ल्यूटीएल कक्षा समर्थन का उपयोग किया और कस्टम स्थान बार और प्लग-इन COM दृश्यों को शामिल करने के लिए फ़ाइल संवाद को अनुकूलित किया।

MSDN यह जानकारी कैसे प्रदान करता है, Win32 का उपयोग करने के लिए, इस CodeProject आलेख में एक उदाहरण शामिल है , और यह CodeProject आलेख एक। NET उदाहरण प्रदान करता है ।

आप इस तरह से कोड का उपयोग कर सकते हैं

  • फिल्टर छिपाई फाइल है
  • फ़ाइल का नाम पहले पाठ छिपाना है

फ़ाइल नाम के लिए पाठ बॉक्स के उन्नत छिपाने के लिए आपको ओपनफीलीडीआईएलएजेक्स को देखने की जरूरत है

कोड:

 { openFileDialog2.FileName = "\r"; openFileDialog1.Filter = "folders|*.neverseenthisfile"; openFileDialog1.CheckFileExists = false; openFileDialog1.CheckPathExists = false; } 

मैं मानता हूं कि आप VS2008 का उपयोग कर Vista पर हैं? उस स्थिति में मुझे लगता है कि विस्टा फ़ाइल संवाद IFileDialog को कॉल करते समय FOS_PICKFOLDERS विकल्प का उपयोग किया जा रहा है मुझे डर है कि .net कोड में यह काम करने के लिए बहुत अधिक गहरा पी / आदान-प्रदान कोड शामिल होगा I

CodeProject (क्रेडिट से नाइट्रोन) से यह कोशिश करें:

मुझे लगता है कि यह वही संवाद है जिसके बारे में आप बात कर रहे हैं – अगर आप स्क्रीनशॉट जोड़ते हैं तो शायद यह मददगार होगा?

 bool GetFolder(std::string& folderpath, const char* szCaption=NULL, HWND hOwner=NULL) { bool retVal = false; // The BROWSEINFO struct tells the shell how it should display the dialog. BROWSEINFO bi; memset(&bi, 0, sizeof(bi)); bi.ulFlags = BIF_USENEWUI; bi.hwndOwner = hOwner; bi.lpszTitle = szCaption; // must call this if using BIF_USENEWUI ::OleInitialize(NULL); // Show the dialog and get the itemIDList for the selected folder. LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); if(pIDL != NULL) { // Create a buffer to store the path, then get the path. char buffer[_MAX_PATH] = {'\0'}; if(::SHGetPathFromIDList(pIDL, buffer) != 0) { // Set the string value. folderpath = buffer; retVal = true; } // free the item id list CoTaskMemFree(pIDL); } ::OleUninitialize(); return retVal; } 

आप इस तरह से कोड का उपयोग कर सकते हैं

फिल्टर खाली स्ट्रिंग है फ़ाइल नाम AnyName है लेकिन रिक्त नहीं है

  openFileDialog.FileName = "AnyFile"; openFileDialog.Filter = string.Empty; openFileDialog.CheckFileExists = false; openFileDialog.CheckPathExists = false; 

पहला समाधान

मैंने इसे विकसित किया है। NET Win 7-style फ़ोल्डर के क्लीन अप संस्करण के रूप में IBC के lycity.com के बिल Seddon (मुझे कोई संबद्धता नहीं है)। (मैं इस पृष्ठ पर दूसरे जवाब से उसका कोड सीखा) मैंने अपना अपना लिखा क्योंकि उसके समाधान के लिए एक अतिरिक्त रिफ्लेक्शन क्लास की आवश्यकता होती है, जो इस केंद्रित उद्देश्य के लिए आवश्यक नहीं है, अपवाद-आधारित प्रवाह नियंत्रण का उपयोग करता है, इसके परावर्तन कॉल के परिणाम कैश नहीं करता है ध्यान दें कि नेस्टेड स्थैतिक VistaDialog वर्ग इतना है कि इसकी स्थिर प्रतिबिंब चर जनसंख्या प्राप्त करने का प्रयास न करें यदि Show विधि को कभी नहीं कहा जाता है। यह पूर्व-विस्टा संवाद पर वापस आ जाता है, यदि नहीं कि उच्च पर्याप्त विंडोज संस्करण में। विंडोज 7, 8, 9, 10 और उच्चतर (सैद्धांतिक रूप से) में काम करना चाहिए।

 using System; using System.Reflection; using System.Windows.Forms; namespace ErikE.Shuriken { /// <summary> /// Present the Windows Vista-style open file dialog to select a folder. Fall back for older Windows Versions /// </summary> public class FolderSelectDialog { private string _initialDirectory; private string _title; private string _fileName = ""; public string InitialDirectory { get { return string.IsNullOrEmpty(_initialDirectory) ? Environment.CurrentDirectory : _initialDirectory; } set { _initialDirectory = value; } } public string Title { get { return _title ?? "Select a folder"; } set { _title = value; } } public string FileName { get { return _fileName; } } public bool Show() { return Show(IntPtr.Zero); } /// <param name="hWndOwner">Handle of the control or window to be the parent of the file dialog</param> /// <returns>true if the user clicks OK</returns> public bool Show(IntPtr hWndOwner) { var result = Environment.OSVersion.Version.Major >= 6 ? VistaDialog.Show(hWndOwner, InitialDirectory, Title) : ShowXpDialog(hWndOwner, InitialDirectory, Title); _fileName = result.FileName; return result.Result; } private struct ShowDialogResult { public bool Result { get; set; } public string FileName { get; set; } } private static ShowDialogResult ShowXpDialog(IntPtr ownerHandle, string initialDirectory, string title) { var folderBrowserDialog = new FolderBrowserDialog { Description = title, SelectedPath = initialDirectory, ShowNewFolderButton = false }; var dialogResult = new ShowDialogResult(); if (folderBrowserDialog.ShowDialog(new WindowWrapper(ownerHandle)) == DialogResult.OK) { dialogResult.Result = true; dialogResult.FileName = folderBrowserDialog.SelectedPath; } return dialogResult; } private static class VistaDialog { private const string c_foldersFilter = "Folders|\n"; private const BindingFlags c_flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; private readonly static Assembly s_windowsFormsAssembly = typeof(FileDialog).Assembly; private readonly static Type s_iFileDialogType = s_windowsFormsAssembly.GetType("System.Windows.Forms.FileDialogNative+IFileDialog"); private readonly static MethodInfo s_createVistaDialogMethodInfo = typeof(OpenFileDialog).GetMethod("CreateVistaDialog", c_flags); private readonly static MethodInfo s_onBeforeVistaDialogMethodInfo = typeof(OpenFileDialog).GetMethod("OnBeforeVistaDialog", c_flags); private readonly static MethodInfo s_getOptionsMethodInfo = typeof(FileDialog).GetMethod("GetOptions", c_flags); private readonly static MethodInfo s_setOptionsMethodInfo = s_iFileDialogType.GetMethod("SetOptions", c_flags); private readonly static uint s_fosPickFoldersBitFlag = (uint) s_windowsFormsAssembly .GetType("System.Windows.Forms.FileDialogNative+FOS") .GetField("FOS_PICKFOLDERS") .GetValue(null); private readonly static ConstructorInfo s_vistaDialogEventsConstructorInfo = s_windowsFormsAssembly .GetType("System.Windows.Forms.FileDialog+VistaDialogEvents") .GetConstructor(c_flags, null, new[] { typeof(FileDialog) }, null); private readonly static MethodInfo s_adviseMethodInfo = s_iFileDialogType.GetMethod("Advise"); private readonly static MethodInfo s_unAdviseMethodInfo = s_iFileDialogType.GetMethod("Unadvise"); private readonly static MethodInfo s_showMethodInfo = s_iFileDialogType.GetMethod("Show"); public static ShowDialogResult Show(IntPtr ownerHandle, string initialDirectory, string title) { var openFileDialog = new OpenFileDialog { AddExtension = false, CheckFileExists = false, DereferenceLinks = true, Filter = c_foldersFilter, InitialDirectory = initialDirectory, Multiselect = false, Title = title }; var iFileDialog = s_createVistaDialogMethodInfo.Invoke(openFileDialog, new object[] { }); s_onBeforeVistaDialogMethodInfo.Invoke(openFileDialog, new[] { iFileDialog }); s_setOptionsMethodInfo.Invoke(iFileDialog, new object[] { (uint) s_getOptionsMethodInfo.Invoke(openFileDialog, new object[] { }) | s_fosPickFoldersBitFlag }); var adviseParametersWithOutputConnectionToken = new[] { s_vistaDialogEventsConstructorInfo.Invoke(new object[] { openFileDialog }), 0U }; s_adviseMethodInfo.Invoke(iFileDialog, adviseParametersWithOutputConnectionToken); try { int retVal = (int) s_showMethodInfo.Invoke(iFileDialog, new object[] { ownerHandle }); return new ShowDialogResult { Result = retVal == 0, FileName = openFileDialog.FileName }; } finally { s_unAdviseMethodInfo.Invoke(iFileDialog, new[] { adviseParametersWithOutputConnectionToken[1] }); } } } // Wrap an IWin32Window around an IntPtr private class WindowWrapper : IWin32Window { private readonly IntPtr _handle; public WindowWrapper(IntPtr handle) { _handle = handle; } public IntPtr Handle { get { return _handle; } } } } } 

यह एक ऐसा विंडोज फॉर्म में प्रयोग किया जाता है:

 var dialog = new FolderSelectDialog { InitialDirectory = musicFolderTextBox.Text, Title = "Select a folder to import music from" }; if (dialog.Show(Handle)) { musicFolderTextBox.Text = dialog.FileName; } 

आप निश्चित रूप से अपने विकल्पों के साथ खेल सकते हैं और यह किस गुण को प्रदर्शित करता है। उदाहरण के लिए, यह विस्टा-शैली संवाद में बहुस्तरीय अनुमति देता है।

दूसरा समाधान

साइमन मोरीयर ने एक जवाब दिया जो दिखाता है कि विंडोज़ एपीआई के सीधे इंटरपॉप के जरिए सटीक काम करने के लिए कैसे काम करना है, हालांकि, अगर इसके संस्करण को पुरानी शैली संवाद का उपयोग करने के लिए पूरक होना होगा, यदि विंडोज़ के एक पुराने संस्करण में दुर्भाग्यवश, जब मैंने अपना समाधान अपनाया, तब तक मुझे उसका पद नहीं मिला। अपने ज़हर को नाम दें!

Vista पर आप IFileDialog का उपयोग FOS_PICKFOLDERS विकल्प सेट के साथ कर सकते हैं। इससे OpenFileDialog-like विंडो का प्रदर्शन होगा जहां आप फ़ोल्डर्स का चयन कर सकते हैं:

 var frm = (IFileDialog)(new FileOpenDialogRCW()); uint options; frm.GetOptions(out options); options |= FOS_PICKFOLDERS; frm.SetOptions(options); if (frm.Show(owner.Handle) == S_OK) { IShellItem shellItem; frm.GetResult(out shellItem); IntPtr pszString; shellItem.GetDisplayName(SIGDN_FILESYSPATH, out pszString); this.Folder = Marshal.PtrToStringAuto(pszString); } 

पुराने विंडोज़ के लिए आप हमेशा फ़ोल्डर में किसी फ़ाइल को चुनने के लिए चाल का सहारा ले सकते हैं।

कार्यरत उदाहरण जो .NET Framework 2.0 पर काम करता है और बाद में यहां पाया जा सकता है ।

मुझे पता है कि प्रश्न OpenFileDialog कॉन्फ़िगरेशन पर था, लेकिन यह देखकर कि Google मुझे यहां लाया है मैं यह भी FolderBrowserDialog सकता हूं कि यदि आप केवल फ़ोल्डरों की तलाश कर रहे हैं तो आपको एक FolderBrowserDialog का उपयोग करना चाहिए इसके बजाय नीचे दिए गए किसी अन्य SO प्रश्न के उत्तर के अनुसार

कैसे vb.net में खुले फ़ाइल संवाद का उपयोग कर पथ निर्दिष्ट करें?