如何在Winfoms中拖放一个通用对象?

时间:2016-09-30 05:26:32

标签: c# generics drag-and-drop

我有以下代码:

private void MouseMove(object sender, MouseEventArgs e)
    {
        TileView view = sender as TileView;
        if (view == null) return;
        if (e.Button == MouseButtons.Left && _TileHitInfo != null)
        {
            Size dragSize = SystemInformation.DragSize;
            Rectangle dragRect = new Rectangle(new Point(_TileHitInfo.HitPoint.X - dragSize.Width / 2,
                _TileHitInfo.HitPoint.Y - dragSize.Height / 2), dragSize);

            if (!dragRect.Contains(new Point(e.X, e.Y)))
            {
                T row = view.GetRow(_TileHitInfo.RowHandle) as T;
                if (row != null)
                {
                    view.GridControl.DoDragDrop(new DragnDropObject<T> {Data =row}, DragDropEffects.Copy);
                }
                _TileHitInfo = null;
                DXMouseEventArgs.GetMouseArgs(e).Handled = true;
            }
        }
    }

这似乎可以正确设置拖放对象。但是,当我去收集器DragDrop事件处理程序中的对象取消框时,以下代码不起作用(当传递ImageGrab类型的对象时):

if (e.Data.GetDataPresent(typeof (DragnDropObject<ImageGrab>)))
        {
            e.Effect = DragDropEffects.Copy;
        }
        else
        {
            e.Effect = DragDropEffects.None;
        }

有没有办法在Drag n Drop对象数据中使用泛型类型?

如果我将包装器对象(T)中的DragnDropObject属性定义为object并删除泛型类型,则所有似乎都可以正常工作。

有没有办法可以保留我的通用方法/对象并对类型进行操作,而不是总是将我的&#34;包装器对象取消装箱&#34;然后将类型转换到那里?

0 个答案:

没有答案