В моем приложении реализовано перетаскивание, но у меня возникли трудности с определением типа перетаскиваемого объекта. У меня есть базовый класс Indicator
и несколько классов, полученных из него. Перетаскиваемый объект может быть любого из этих типов. Приведенный ниже фрагмент кода кажется не элегантным и подвержен проблемам с обслуживанием. Каждый раз, когда мы добавляем новый производный класс, мы должны помнить, чтобы касаться этого кода. Похоже, мы должны как-то здесь использовать наследование.
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;
}
}
Аналогично, у нас есть проблемы с использованием GetData для фактического получения перетаскиваемого объекта:
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));
}
Спасибо.