J'ai implémenté le glisser-déposer dans mon application, mais j'ai de la difficulté à déterminer le type de l'objet à déplacer. J'ai une classe de base Indicator
et plusieurs classes dérivées. Un objet déplacé pourrait être de l'un de ces types. L'extrait de code ci-dessous semble inélégant et est sujet à des problèmes de maintenance. Chaque fois que nous ajoutons une nouvelle classe dérivée, nous devons nous souvenir de toucher ce code. Il semble que nous devrions être en mesure d'utiliser l'héritage ici d'une manière ou d'une autre.Comment déterminer le type de données à partir 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;
}
}
De même, nous avons des problèmes en utilisant GetData pour obtenir effectivement l'objet traîné:
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));
}
Merci.
Cela fonctionne comme un champion! Pour compléter votre solution: À l'intérieur de OnMouseDown, j'avais auparavant: DoDragDrop Maintenant, cela ressemble à ceci: DataObject d = new DataObject(); d.SetData (typeof (indicateur), indicateur); DoDragDrop (d, DragDropEffects.Move); – NascarEd