2011-07-01 14 views
5

मेरे पास 2 एक ही रूप हैं: सूची और एक पेड़ (विशिष्ट प्रकार के नाम अप्रासंगिक हैं)।कस्टम ऑब्जेक्ट खींचें और छोड़ें

सूची नियंत्रण में मैं DoDragDrop विधि निष्पादित करता हूं। पहली तर्क के रूप में मैं एक ऑब्जेक्ट पास करता हूं जो उस पंक्ति से डेटा था। ऑब्जेक्ट एक विशिष्ट इंटरफ़ेस लागू करता है और सीरियलज़ेबल विशेषता के साथ चिह्नित किया जाता है।

मैं चाहता हूं कि पेड़ नियंत्रण के DragEnter/DragDrop ईवेंट हैंडलर में उस ऑब्जेक्ट को पुनः प्राप्त करना है। मैं निम्नलिखित कोड का उपयोग कर रहा:

void TreeControlDragEnter(object sender, DragEventArgs e) 
{ 
    var formats = e.Data.GetFormats(); 
    var data = e.Data.GetData(typeof (IFoo)); 
} 

दुर्भाग्य से, परिणाम में डाटा शून्य है और स्वरूप एक एक तत्व सरणी जो विशेष प्रकार (IFoo को लागू करने) के नाम रखती है। मुझे लगता है कि ऑब्जेक्ट को पुनर्प्राप्त करने के लिए मुझे गेटडाटा को सटीक प्रकार का नाम पारित करना होगा, लेकिन यह संभव नहीं है क्योंकि यह एक निजी वर्ग है।

क्या ऑब्जेक्ट को अपने इंटरफ़ेस से प्राप्त करने का कोई तरीका है?

उत्तर

4

आपको उसी श्रेणी के रूप में प्रदान करना होगा जो पहले स्थान पर क्रमबद्ध था। आप धारावाहिक वर्ग के इंटरफ़ेस या बेस क्लास का उपयोग नहीं कर सकते हैं क्योंकि तब प्रारूपों में से एक से अधिक मिलान हो सकता है और यह नहीं पता कि कौन सा deserialize है। यदि आपके पास कई कक्षाएं हैं जो सभी IFoo को लागू करती हैं और डेटा ऑब्जेक्ट के अंदर प्रत्येक का एक उदाहरण है तो IFoo पूछना अस्पष्ट होगा। तो आपको डेटा ऑब्जेक्ट में क्रमबद्ध सटीक प्रकार के लिए पूछना चाहिए।

इसका मतलब है कि आपको कक्षा ऑब्जेक्ट में कक्षाएं नहीं रखनी चाहिए जिन्हें deserialized नहीं किया जा सकता क्योंकि वे दूसरे छोर पर निजी हैं।

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