Ich habe Drag & Drop in meiner Anwendung implementiert, habe aber Schwierigkeiten, den Typ des Objekts zu bestimmen, das gezogen wird. Ich habe eine Basisklasse Indicator
und mehrere davon abgeleitete Klassen. Ein gezogenes Objekt könnte von einem dieser Typen sein. Das folgende Code-Snippet scheint unelegant zu sein und ist anfällig für Wartungsprobleme. Jedes Mal, wenn wir eine neue abgeleitete Klasse hinzufügen, müssen wir daran denken, diesen Code zu berühren. Es scheint, als ob wir in der Lage sein könnten, die Vererbung hier irgendwie zu verwenden.So bestimmen Sie den Datentyp von DragEventArgs
protected override void OnDragOver(DragEventArgs e)
{
base.OnDragOver(e);
e.Effect = DragDropEffects.None;
// If the drag data is an "Indicator" type
if (e.Data.GetDataPresent(typeof(Indicator)) ||
e.Data.GetDataPresent(typeof(IndicatorA)) ||
e.Data.GetDataPresent(typeof(IndicatorB)) ||
e.Data.GetDataPresent(typeof(IndicatorC)) ||
e.Data.GetDataPresent(typeof(IndicatorD)))
{
e.Effect = DragDropEffects.Move;
}
}
Ebenso haben wir Probleme GetData verwenden, um tatsächlich das gezogene Objekt zu erhalten:
protected override void OnDragDrop(DragEventArgs e)
{
base.OnDragDrop(e);
// Get the dragged indicator from the DragEvent
Indicator indicator = (Indicator)e.Data.GetData(typeof(Indicator)) ??
(Indicator)e.Data.GetData(typeof(IndicatorA)) ??
(Indicator)e.Data.GetData(typeof(IndicatorB)) ??
(Indicator)e.Data.GetData(typeof(IndicatorC)) ??
(Indicator)e.Data.GetData(typeof(IndicatorD));
}
Dank.
Das funktioniert wie ein Champion! Um Ihre Lösung abzuschließen: Innerhalb von OnMouseDown, ich hatte: DoDragDrop (Indikator, DragDropEffects.Move); Jetzt sieht es so aus: DataObject d = new DataObject(); d.SetData (typeof (Indikator), Indikator); DoDragDrop (d, DragDropEffects.Move); – NascarEd