Implementé arrastrar y soltar en mi aplicación, pero estoy teniendo algunas dificultades para determinar el tipo de objeto que se está arrastrando. Tengo una clase base Indicator
y varias clases derivadas de ella. Un objeto arrastrado podría ser de cualquiera de estos tipos. El siguiente fragmento de código parece poco elegante y es propenso a problemas de mantenimiento. Cada vez que agreguemos una nueva clase derivada, debemos recordar tocar este código. Parece que deberíamos poder usar la herencia aquí de alguna manera.Cómo determinar el tipo de datos de 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;
}
}
Del mismo modo, tenemos problemas utilizando GetData para conseguir realmente el objeto arrastrado:
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));
}
Gracias.
¡Eso funciona como un campeón! Para completar su solución: Dentro de OnMouseDown, solía tener: Ahora, se ve así: DataObject d = new DataObject(); d.SetData (typeof (indicador), indicador); DoDragDrop (d, DragDropEffects.Move); – NascarEd