I am using C# and Winforms 3.5
I have a list of user controls all derived from one base class. These controls can be added to various panels and I'm trying to implement the drag-drop functionality, the problem I'm running in to is on the DragDrop event.
For DragEventArgs e.Data.GetData(typeof(baseClass))
doesn't work. It wants:
e.Data.GetData(typeof(derivedClass1))
e.Data.GetData(typeof(derivedClass2))
etc...
Is there a way I can get around this, or a better way to architect it?
You can wrap the data in a common class. For example, assuming your base class is called DragDropBaseControl
public class DragDropInfo
{
public DragDropBaseControl Control { get; private set; }
public DragDropInfo(DragDropBaseControl control)
{
this.Control = control;
}
}
And then the drag drop can be initiated with the following in the base class
DoDragDrop(new DragDropInfo(this), DragDropEffects.All);
And you can access the data in the drag events using the following
e.Data.GetData(typeof(DragDropInfo));
Have I understood your requirement correctly?
To get the dragged object dynamically, without even knowing its type or its base type, I use this code inside the DragDrop
event:
baseClass myObject = (baseClass)e.Data.GetData(e.Data.GetFormats()[0]);
as e.Data.GetFormats()[0]
will always hold string representation of the type of the dragged object.
Note that I assumed there's one object was dragged but the idea is the same for multiple dragged objects.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With