2009-12-11 8 views
21

ड्रैगिंग "स्रोत" से "लक्ष्य" तक होती है। जब स्रोत DragDropEffects.Copy के रूप में स्वीकृत प्रभावों के साथ DoDragDrop() को कॉल करता है, तो मैं लक्ष्य = DragDropEffects को सेट करके ड्रॉप को रद्द करने में सक्षम हूं। लक्ष्य पर (ड्रैगओवर ईवेंट में)।प्रभाव = ड्रैगड्रॉपफ्रैक्ट्स सेट होने पर भी ड्रॉप अनुमति क्यों है? कोई सेट है?

लेकिन जब मैं ड्रैगड्रॉपफ्रेट्स.मोव के रूप में अपने अनुमत प्रभाव सेट करता हूं तो वही स्थिति विफल हो जाती है।

स्थिति पुन: पेश करने के लिए, (DragDropEffects.Move को) http://jaimersamples.members.winisp.net/samples/dragdrop/drag.zip

बदलें लाइन से नमूना डाउनलोड ..

DragDrop.DoDragDrop(this.DragSource, data, DragDropEffects.Copy); 

जोड़ें लाइन ..

void Window1_DragOver(object sender, DragEventArgs args) 
{ 
    args.Effects = DragDropEffects.None; 

और यह भी बाहर टिप्पणी संपूर्ण, DragSource_GiveFeedback ..

void DragSource_GiveFeedback(object sender, GiveFeedbackEventArgs e) 
{ 
    //System.Diagnostics.Debug.WriteLine("DragSource_GiveFeedback " + e.Effects.ToString()); 

क्या ढांचे में कुछ प्रकार की बग है, या क्या मैं कुछ स्पष्ट नहीं देख पा रहा हूं?

+1

मुझे नमूना के साथ आपकी समस्या को पुन: उत्पन्न करने में समस्याएं आ रही हैं। अनमोडिफाइड, नमूना मुझे लाल कैनवास में लाल बॉक्स को छोड़ने की अनुमति नहीं देता है। इसके अलावा, DragDropEffects के सभी उदाहरण। * पहले से ही सेट हैं। इसलिए, मुझे यकीन नहीं है कि कोड की कौन सी पंक्ति को बदलने की जरूरत है। इसके लायक होने के लिए, मैंने उन्हें सभी को DragDropEffects.Copy में बदल दिया और मैं अभी भी आइटम को गंतव्य कैनवास में नहीं छोड़ सका। –

+0

मैं स्क्रीनशॉट लेने में सक्षम नहीं हूं यह दिखाने के लिए कि मैं क्या इच्छित प्रभाव चाहता हूं। माउस कर्सर स्क्रीनशॉट में शामिल नहीं है, लेकिन मैं अपने प्रश्न को दोबारा बदल दूंगा। नमूना लाल बॉक्स को छोड़ने को लागू नहीं करता है, यह सिर्फ ड्रैग शुरू करता है। मैं क्या चाहता हूं कि माउस कर्सर हमेशा इंगित करता है कि एक बूंद की अनुमति है या नहीं। यह काम कर रहा है जब मैं DragDropEffects.Copy के साथ DoDragDrop() को कॉल करता हूं, और args.Effects = DragDropEffects.None1_DragOver में कोई नहीं। लेकिन जब मैं DragDropEffects.Move के साथ DoDragDrop() को कॉल करता हूं तो यह काम नहीं कर रहा है। – Trainee4Life

+0

क्या आपको फीडबैक के दौरान प्रभाव स्थापित नहीं करना चाहिए? – leppie

उत्तर

53

आपकी टिप्पणियों और कोड को फिर से चलाने के बाद, कुछ प्रयासों के साथ मैं जिस समस्या के बारे में बात कर रहा हूं उसे समझने और पुन: उत्पन्न करने में सक्षम था।

e.Handled = true; 

अपने Window1_DragOver घटना में:

आप क्या भूल रहे हैं रेखा है। इसे जोड़ें और यह DragDropEffects.Move और DragDropEffects.Copy दोनों के लिए भी काम करेगा।

DragDropEffects.Copy के लिए यह पहली जगह में e.Handled सेट किए बिना क्यों काम करता है किसी का अनुमान है। अनियंत्रित स्थितियां अनियंत्रित व्यवहार की ओर ले जाती हैं।

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

+0

1. पूरे विंडो में ड्रैग स्कोप के बारे में बात करते हुए, माउस को खिड़की से बाहर खींचने पर केवल ड्रैग को रद्द करने के लिए एक चेक है। 2. मेरा प्रश्न विशेष रूप से कहता है कि संपूर्ण GiveFeedback पर टिप्पणी की जानी चाहिए। 3. मुझे समझ में आता है कि यह ड्रॉप लक्ष्य है जो निर्दिष्ट करता है कि डेटा स्वीकार करना है या नहीं। ड्रॉप लक्ष्य अपने ड्रैगओवर ईवेंट का उपयोग यह निर्दिष्ट करने के लिए करता है कि क्या args.Effects = DragDropEffects.None सेट करके ड्रॉप स्वीकार करना है या नहीं। यदि यह मामला है, तो यह कॉपी या मूव इफेक्ट्स भी सेट कर सकता है। 4. ड्रैगसोर्स अभी भी DragDrop.DoDragDrop() कॉल में अनुमत प्रभाव निर्दिष्ट कर सकता है। – Trainee4Life

+0

5. कोड का उत्पादन में उपयोग नहीं किया जा रहा है। यह हमारे नमूने में से एक था जब मैंने अपने आवेदन में ड्रैग ड्रॉप फ्रेमवर्क बनाया था। – Trainee4Life

+0

कृपया फिर से प्रश्न पढ़ें, अगर आप जो भी कहते हैं उसे पुन: उत्पन्न कर सकते हैं तो आप जवाब देने के लिए बेहतर स्थिति में होंगे। – Trainee4Life

1

मुझे लगता है कि सवाल अच्छी तरह से ऊपर, लेकिन मैं तो बस सोचा था कि यह एक महत्वपूर्ण सबक जब खींचें और ड्रॉप कर कि मुझे पता चला था जवाब था ...

प्रारंभिक DragDropEffect कि DoDragDrop विधि को पारित कर दिया है विचार किया जाना चाहिए एक ऑपरेशन (या इच्छा) के रूप में किस ऑपरेशन के लिए किया जाना चाहिए। यदि मुझे सही ढंग से याद है, तो वह विधि वास्तविक प्रभाव को वापस लाती है जब लक्ष्य ड्रैग और ड्रॉप वास्तव में सफल होता था (और रद्द नहीं किया गया था)।

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

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

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