我已經在我的應用程序中實現了拖放功能,但在確定被拖動的對象的類型時遇到了一些困難。我有一個基類Indicator
和從它派生的幾個類。拖動的對象可以是這些類型中的任何一種。下面的代碼片段看起來不夠優雅,容易出現維護問題。每次我們添加一個新的派生類時,我們都必須記住觸摸這個代碼。似乎我們應該能夠以某種方式在這裏使用繼承。如何從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;
}
}
同樣,我們使用的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));
}
感謝。
這就像一個冠軍! 要完成您的解決方案: 在OnMouseDown裏面,我曾經有: DoDragDrop(indicator,DragDropEffects.Move); 現在,它看起來像這樣: DataObject d = new DataObject(); d。設置數據(typeof(Indicator),indicator); 012DDDDDrop(d,DragDropEffects.Move); – NascarEd 2010-06-30 14:48:43