2009-06-01 6 views
7

क्या OpenFileDialog के व्यवहार को संशोधित करने का कोई तरीका है ताकि यह उस फ़ोल्डर में फ़ाइलों के अंदर दिखता है जो उसके लिए खुलता है और फिर उनकी सामग्री के आधार पर कुछ लोगों को अनदेखा करता है?सामग्री पर आधारित OpenFileDialog में दिखाए गए फ़ाइलों को फ़िल्टर करना?

एक उदाहरण ज़िप फ़ाइलों से भरा फ़ोल्डर में खोलना होगा, लेकिन केवल उन लोगों को दिखाएं जिनमें एक निश्चित फ़ाइल है।

प्रलेखन से, हुकप्रोक है लेकिन मुझे बिल्कुल यकीन नहीं है कि मैं इसका उपयोग कैसे करूंगा।

कृपया ध्यान दें कि यदि यह संभव है, तो मुझे एहसास है कि यह अपेक्षाकृत धीमी गति से संचालन होगा। फिलहाल मैं प्रदर्शन के बारे में चिंतित नहीं हूं।

धन्यवाद!

उत्तर

3

मैं OpenFileDialog की जटिलता को खारिज नहीं करता। वास्तव में काम करने वाले व्यक्ति को बनाना इतना आसान नहीं है। जब आप अपना खुद का निर्माण करते हैं, तो यह "सामान्य" संवाद नहीं होता है और नतीजतन यह उपयोगकर्ताओं को भ्रमित करता है। यह सच है भले ही आप इसे अच्छी तरह से करें, जो मुश्किल है। तो मैं सुझाव दूंगा कि आप कुछ नया लिखने के बजाय पहले से मौजूद है, विस्तारित करने के लिए चिपके रहें।

this article for an extension of OFD जांचें जो कि आप जो चाहते हैं उसे करने के लिए tweaked हो सकता है। एक कॉलबैक है जिसे आप सी # में लिखते हैं जो पथ चयन का जवाब देता है।

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


एक और विकल्प जिसे आप विचार कर सकते हैं dialog library from Ookii है। यह OpenFileDialog का एक ओपन सोर्स कार्यान्वयन है, और इसमें Vista में सभी नए संवाद सामग्री के लिए COM wrappers शामिल हैं। उस लाइब्रेरी का उपयोग करके आप एक Vista OpenFileDialog पॉप कर सकते हैं और C# कोड में IFileDialogEvents इंटरफ़ेस से ईवेंट प्राप्त कर सकते हैं। ऐसी एक घटना ऑनफोल्डर चेंज() है। हैंडलर के भीतर आप IFolder.GetFolder() को कॉल कर सकते हैं जो आपको IShellItem प्राप्त करेगा, जो आपको वह फ़ोल्डर देता है जिस पर उपयोगकर्ता बदल रहा है। अगला चरण आइटम को सेट करने और संभवतः फ़िल्टर के सेट को फ़िल्टर करना होगा, जो एक अभ्यास है जिसे मैं पाठक को छोड़ दूंगा ...

+0

दिलचस्प! मैं कल इसे देख लूंगा। धन्यवाद! – djcouchycouch

1

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

आप इस प्रश्न का सहायक ज़िप फ़ाइलों की सूची सामग्री के बारे में मिल सकती है:

How to list the contents of a .zip folder in c#?

(ध्यान दें, आप संभवतः यह थ्रेड सकता है प्रदर्शन में सुधार करने के लिए, बस कई धागे अवधि नहीं है)

0

आप शायद विंडोज एपीआई कोड पैक (स्रोत के साथ आता है) का उपयोग कर सकते हैं। सामान्य फ़ाइल संवाद सुविधा Winforms/WPF के संस्करणों की तुलना में फ़ाइल संवाद की बहुत अधिक कार्यक्षमता का खुलासा करती है।

http://code.msdn.microsoft.com/WindowsAPICodePack

संबंधित मुद्दे