用户控件在执行自定义拖放操作时对鼠标移动无反应

时间:2018-07-22 13:49:48

标签: c# winforms

我有一个用户控件,并且在面板上添加了许多实例。控件以列格式添加。然后,我想开始一个拖放操作,该操作允许我在列中交换控件的位置。

我的拖动操作是这样启动的:

protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
    mousePosition = e.Location;
}

protected override void OnMouseDown(MouseEventArgs e)
{
    base.OnMouseDown(e);
    mousePosition = e.Location;
}

protected override void OnMouseMove(MouseEventArgs e)
{
    base.OnMouseMove(e);

    if (e.Button == MouseButtons.Left)
    {
        dynamic dx = e.X - mousePosition.X;
        dynamic dy = e.Y - mousePosition.Y;

        //Drag started
        if (Math.Abs(dx) >= SystemInformation.DoubleClickSize.Width || 
            Math.Abs(dy) >= SystemInformation.DoubleClickSize.Height)
        {
            IsDragging = true;
            Capture = true;
        }

        //Dragged upon
        if (!IsDragging)
        {
            //item is always null
            var item = ((MyControl)Parent).DraggedItem;
        }
    }
}

protected override void OnMouseUp(MouseEventArgs e)
{
    base.OnMouseUp(e);

    if (IsDragging)
    {
        IsDragging = false;
        Capture = false;
    }
}

父母的财产DraggedItem为:

public MyControl DraggedItem
{
    get 
    {
        return this.Controls.Cast<MyControl>().SingleOrDefault(x => x.IsDragging == true);
    }
}

我要在此处实现的目标是,一旦启动拖动,便应通知其他控件鼠标在它们上方并且正在拖动({{1}中的!IsDragging条件}。

但是,问题是OnMouseMove始终为空。我尝试过不设置DraggedItem属性,但是它仍然不起作用。

我需要让父母对其控件进行点击测试吗?

0 个答案:

没有答案