2013-03-07 21 views
0

我有一个问题,比较我从一个事件参数获得的数据,更具体地说,我有2个类使用接口,让我们称之为'IInt'。我也有一个充满了这两个类的对象的列表。提取和比较eventargs数据

我目前使用OnDragDrop事件从这个列表中拖动对象,但我需要一种方法来确定它是否是我绘制的class1或class2的对象。有没有办法提取数据并使用DragEventArgs drgevent进行比较?

首先,当我从列表中抓取一个对象时。

foreach (IInt d in dlist) 
    DoDragDrop(d.GetType(), DragDropEffects.Move); 

而当我想提取数据,即检查什么对象被拖动。

protected override void OnDragDrop(DragEventArgs drgevent) 
    { 
     if (drgevent.GetType() == typeof(DragedObject)) 
      do stuff... 
    } 

回答

2

终于等到这根之后,我们发现您的答案是here

if (e.Data.GetDataPresent(typeof(YourType))) { 
    YourType item = (YourType)e.Data.GetData(typeof(YourType)); 

如果我理解正确,那么你正在寻找reflection

您可以使用GetType

arg.GetType() == typeof(Class1) 

is

arg is Class1 

UPDATE

没有比提供更多的代码,这里是这听起来像你需要做的:

foreach (IInt d in dlist) 
    DoDragDrop(d, DragDropEffects.Move); 

DoDragDrop听起来像它会创建从该DragEventArgs对象和效果,所以你会想这样的事情:

protected override void OnDragDrop(DragEventArgs drgevent) 
{ 
    if (drgevent.dObject.GetType() == typeof(DraggedObject)) 
     do stuff... 
} 

请注意,您并未测试arg本身,而是测试它包含的内容。

+0

Doesen't似乎工作,在我的DoDragDrop我从列表发送的内容的类型,像这样: 的DoDragDrop(obj.GetType(),DragDropEffect.Move)(其中obj是一个foreach里面裁判变量循环遍历整个列表) – Jacco 2013-03-07 18:45:48

+0

您应该可能上传示例代码段。如果你的DoDragDrop需要一个类型,那么这是正确的,但是如果它期望一个你将测试类型的对象,那么它是错误的。 – 2013-03-07 18:50:39

+0

确实,编辑过的操作使其更加清楚我想实现的目标。 – Jacco 2013-03-07 19:12:05