gpt4 book ai didi

winforms - 如何从 DragEventArgs 确定数据类型

转载 作者:行者123 更新时间:2023-12-02 18:55:54 25 4
gpt4 key购买 nike

我已经在我的应用程序中实现了拖放,但在确定被拖动对象的类型时遇到一些困难。我有一个基类 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));
}

谢谢。

最佳答案

通过显式指定类型来存储数据,即

dataObject.SetData(typeof(Indicator), yourIndicator);

这将允许您仅根据 Indicator 类型而不是子类型来检索它。

关于winforms - 如何从 DragEventArgs 确定数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com