【问题标题】:Extract and compare eventargs data提取和比较 eventargs 数据
【发布时间】:2013-03-07 17:58:44
【问题描述】:

我在比较从事件参数获得的数据时遇到问题,更具体地说,我有 2 个使用接口的类,我们称之为“IInt”。我还有一个包含这两个类的对象的列表。

我目前使用 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...
    }

【问题讨论】:

    标签: c# windows winforms forms


    【解决方案1】:

    在终于找到问题的根源之后,您的答案似乎是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
    

    更新

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

    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 本身,而是在测试它包含的内容。

    【讨论】:

    • 似乎不起作用,在我的 DoDragDrop 上,我从列表 中发送项目的类型,如下所示: DoDragDrop(obj.GetType(), DragDropEffect.Move) (其中 obj 是遍历整个列表的 foreach 循环中的 ref 变量)
    • 你应该上传一个示例 sn-p。如果您的 DoDragDrop 需要一个类型,那么这是正确的,但如果它需要一个您将测试该类型的对象,那么这是错误的。
    • 是的,编辑了操作以更清楚地说明我想要实现的目标。
    • @Jacco 这仍然没有帮助。完整的故事不见了......似乎你想将d 传递给DoDragDrop 而不是它的类型。但是,我不知道这一切是如何下降到 Arg 级别的......
    • 我对此很陌生,所以也许我的尝试完全失败了,idk .. 但希望我想要实现的目标足够清楚,从列表中发送一些东西,然后再获取它的类型。我不确定我还能如何解释它,我所知道的只是我尝试过的方法现在不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多