2008-09-05 15 views
26

के साथ एक फ़ोल्डर का चयन करना सी # .NET 3.5 ऐप (WinForms और WPF का मिश्रण) में मैं उपयोगकर्ता को डेटा का एक लोड आयात करने के लिए फ़ोल्डर चुनने देना चाहता हूं। फिलहाल, यह System.Windows.Forms.FolderBrowserDialog का उपयोग कर रहा है लेकिन यह थोड़ा लंगड़ा है। मुख्य रूप से क्योंकि आप इसमें पथ टाइप नहीं कर सकते हैं (इसलिए यूएनसी पथ टाइप करने के बजाय आपको नेटवर्क ड्राइव को मैप करने की आवश्यकता है)।.NET 3.5

मुझे System.Windows.Forms.OpenFileDialog की तरह कुछ और चाहिए, लेकिन फ़ाइलों के बजाय फ़ोल्डर के लिए।

इसके बजाय मैं इसका उपयोग कैसे कर सकता हूं? एक WinForms या WPF समाधान ठीक है, लेकिन मैं विंडोज एपीआई में PInvoke नहीं करना पसंद करूंगा अगर मैं इससे बच सकता हूं।

उत्तर

36

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

पूर्ण स्रोत कोड। मुक्त। एमएस-पब्लिक लाइसेंस।

FolderBrowserDialogEx

कोड इसका इस्तेमाल करने की:

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; 
} 
+30

अहह्ह! चमकदार गुलाबी! मेरी आंखें ... मेरी खराब आंखें ... – dthrasher

+11

मेरी बेटी ने ऐसा किया ... – Cheeso

+6

क्या यह सामान्य बहाना नहीं है? ;-) – Joey

1

दुर्भाग्यवश फ़ोल्डर चयन के लिए FolderBrowserDialog के अलावा कोई संवाद नहीं है। आपको यह संवाद स्वयं बनाने या PInvoke का उपयोग करने की आवश्यकता है।

0

अब तक my identical question पर प्रतिक्रियाओं की कमी के आधार पर, मुझे लगता है कि उत्तर स्क्रैच से अपना स्वयं का संवाद रोल करना है।

मैंने वीबी 6 से आम संवादों को उप-वर्गीकरण के बारे में यहां और वहां चीजें देखी हैं और मुझे लगता है कि यह समाधान का हिस्सा हो सकता है, लेकिन मैंने कभी भी यह सोचने के बारे में कुछ भी नहीं देखा है कि संवाद क्या सोच रहा है। यह .NET के माध्यम से PInvoke और कुछ अन्य चाल के माध्यम से संभव होगा, लेकिन मुझे अभी तक कोड नहीं दिख रहा है जो ऐसा करता है।

मैं जानता हूँ कि यह संभव है और यह नहीं विस्टा विशेष क्योंकि दृश्य स्टूडियो वी.एस. 2003

के बाद से यह किया गया है यहाँ किसी को आपकी या मेरा जवाब देती है उम्मीद कर रहा है!

0

एक ऐसी ही समाधान मैं a working solution को leetNightShade द्वारा this answer पाया के लिए खोज के घंटे के बाद।

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

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

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

कोड here करें।