2010-09-14 13 views
7

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

मैं IDataObject इंटरफ़ेस का उपयोग कर रहा हूँ, लेकिन मेरी समस्या यह है कि GetData() विधि जिस तरह से बहुत जल्दी क्वेरी की जाती है है। उदाहरण के लिए डेस्कटॉप पर एक ड्रैग (बिना किसी ड्रॉप के) GetData() विधि दो बार पूछताछ करेगा। और इनमें से प्रत्येक कॉल फ़ाइल के डाउनलोड को शुरू करता है:/

अब, मेरा प्रश्न है: यहां क्या गलत है - GetData() विधि बिना किसी ड्रॉप के बुलाया गया है? आलसी में आलसी ड्रैग & ड्रॉप ऑपरेशंस को लागू करने का कोई और तरीका है?

+0

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

+0

हां, यह मेरी मदद कर सकता है, लेकिन यह बहुत अधिक जटिल लगता है और केवल एक्सप्लोरर को छोड़ने से बांधता है। अन्य सबसे कम, जो सामान्य रूप से दायरप्रॉप स्वीकार करते हैं, डेटा प्राप्त करने में सक्षम नहीं होंगे। सिद्धांत रूप में, ड्रॉप इवेंट को * IDataObject.GetData() * पर कॉल करना चाहिए - और केवल इसे ऐसा करना चाहिए। फिर मैं डेटा वितरित कर सकता हूं (प्रत्यक्ष या डाउनलोड के माध्यम से)। हालांकि इसमें शामिल कार्यों के बिना इन कार्यों को कॉल किया जाता है, जो इस दृष्टिकोण को अनुपयोगी बनाता है। – tanascius

+0

क्या प्राप्त करने के अंत में बाइट्स देखने के लिए वास्तव में डाउनलोड करने में कोई देरी नहीं है? –

उत्तर

1

हो सकता है कि इस GetData (के हर घटना पर आप के लिए काम कर सकता था ...

) ऐसा करते हैं:

  • तुम यहाँ एक टाइमर के कुछ प्रकार की आवश्यकता होगी।
  • यदि आपका टाइमर पहले से सक्रिय है, तो इसे मार दें।
  • नया टाइमर बनाएं और शुरू करें। इसे 1sec बनाएं या प्रयोग से इसकी अवधि निर्धारित करें। टाइमर इवेंट पर
  • क्या करना है।

मैं कई अवसरों पर समान प्रक्रिया का उपयोग करता हूं जहां इस तरह के कामकाज की आवश्यकता होती है।

+0

यहां समस्या यह है कि ड्रैग को रद्द किया जा सकता है। – tanascius

+0

क्या आप कह रहे हैं कि कोई भी तरीका नहीं है कि आप पूर्ण ड्रैग और ड्रॉप के बीच भेद कर सकते हैं और रद्द कर सकते हैं? –

+0

हां, निरस्त ड्रैग और ड्रॉप के मामले में आप अपना टाइमर कैसे रोकते हैं? – tanascius

1

मुझे लगता है कि GetData कहा जा रहा है ताकि (संभावित) ड्रॉप लक्ष्य निर्धारित कर सके कि यह (संभावित) ड्रॉप आइटम स्वीकार कर सकता है या नहीं। क्या आपने शैल एक्सटेंशन का उपयोग करने पर विचार किया है?

+0

जहां तक ​​मैं समझता हूं [GetDataPresent] (http://msdn.microsoft.com/en- हमें/लाइब्रेरी/f0z723wb.aspx) विधि को पहले कॉल किया जाना चाहिए। अब भी कोशिश कर रहा हूं ... – tanascius

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