Как определить тип данных из DragEventArgs
я реализовал перетаскивание в своем приложении, но у меня возникли некоторые трудности с определением типа перетаскиваемого объекта. У меня есть базовый класс 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));
}
спасибо.
2 ответов
сохраните данные, явно указав тип, т. е.
dataObject.SetData(typeof(Indicator), yourIndicator);
Это позволит вам получить его только на основании Indicator
type, а не дочерний тип.
здесь IDataObject.GetFormats
способ:
возвращает список всех форматов, с которыми связаны или могут быть преобразованы данные, хранящиеся в данном экземпляре.
это массив String
:
String[] allFormats = myDataObject.GetFormats();
затем вы можете проверить этот список для своего типа, один из которых должен быть Indicator
Я бы подумал.