2010-04-28 12 views
7

का उपयोग कर रहा सी # का उपयोग कर रहा है और Winforms 3.5सी # खींचें और छोड़ें - e.Data.GetData एक आधार वर्ग

मैं सभी एक आधार वर्ग से प्राप्त नियंत्रण उपयोगकर्ता की एक सूची है। इन नियंत्रणों को विभिन्न पैनलों में जोड़ा जा सकता है और मैं ड्रैग-ड्रॉप कार्यक्षमता को लागू करने की कोशिश कर रहा हूं, जिस समस्या में मैं चल रहा हूं वह ड्रैगड्रॉप ईवेंट पर है।

DragEventArgs e.Data.GetData(typeof(baseClass)) काम नहीं करता है। यह चाहता है:

e.Data.GetData(typeof(derivedClass1)) 
e.Data.GetData(typeof(derivedClass2)) 
etc... 

क्या कोई तरीका है जिससे मैं इसे प्राप्त कर सकता हूं, या इसे आर्किटेक्ट करने का एक बेहतर तरीका है?

+0

मदद करने के लिए एक पारस्परिक इंटरफ़ेस होगा? – used2could

+0

नहीं, एक इंटरफेस कुछ भी नहीं बदलता है। –

उत्तर

17

आप डेटा को एक सामान्य कक्षा में लपेट सकते हैं। उदाहरण के लिए, यह सोचते हैं अपने आधार वर्ग DragDropBaseControl

public class DragDropInfo 
{ 
    public DragDropBaseControl Control { get; private set; } 

    public DragDropInfo(DragDropBaseControl control) 
    { 
    this.Control = control; 
    } 
} 

कहा जाता है और फिर खींचें ड्रॉप आधार वर्ग

DoDragDrop(new DragDropInfo(this), DragDropEffects.All); 

में निम्नलिखित और आप का उपयोग कर खींचें घटनाओं में डेटा का उपयोग कर सकते हैं के साथ शुरू किया जा सकता निम्नलिखित

e.Data.GetData(typeof(DragDropInfo)); 

क्या मुझे आपकी आवश्यकता सही ढंग से समझ गई है?

+0

मैं इसे आज़मा दूंगा और वापस आऊंगा, लेकिन यह आशाजनक लग रहा है। –

0

गतिशील घसीटा वस्तु प्राप्त करने के लिए, यहां तक ​​कि अपने प्रकार या इसके आधार प्रकार जानने के बिना, मैं DragDrop घटना के अंदर इस कोड का उपयोग:

baseClass myObject = (baseClass)e.Data.GetData(e.Data.GetFormats()[0]); 

रूप e.Data.GetFormats()[0] हमेशा घसीटा के प्रकार की स्ट्रिंग प्रतिनिधित्व का आयोजन करेगा वस्तु।

ध्यान दें कि मुझे लगता है कि एक वस्तु को खींचा गया था लेकिन विचार कई खींचा वस्तुओं के लिए समान है।

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