鼠标在ToolStrip上快速拖动以移动表单

时间:2019-02-10 16:35:01

标签: c# toolstrip

我正在使用通过鼠标事件拖动子控件来移动表单的功能。

该代码适用于ButtonTextBox

但是当我将其应用于ToolStrip上并非常快速地移动鼠标时,光标将超出窗体的范围,窗体停止跟随光标了。

我还尝试在MouseLeave上监听ToolStrip事件,并执行与move方法相同的工作,但是光标仍然可以移到外面,并且窗体的位置不会改变,直到我释放鼠标按钮。

我知道还有其他拖动表单的方法,但是我更喜欢纯C#实现。

感谢您的帮助。

class MouseDragUtility
{
    Control _f;
    Size _offset;

    public void Attach(Control c)
    {
        c.MouseDown += down;
    }

    void down(object sender, MouseEventArgs e)
    {
        var control = (Control)sender;
        _f = control;
        if (!FindForm(ref _f))
            return;
        _offset = (Size)(form.Location - (Size)Cursor.Position);

        //register other events
        control.MouseMove += move;
        control.MouseUp += up;
    }

    void move(object sender, MouseEventArgs e)
    {
        _f.Location = Cursor.Position + _offset;
    }

    void up(object sender, MouseEventArgs e)
    {
        var control = (Control)sender;
        control.MouseMove -= move;
        control.MouseUp -= up;
        _f = null;
    }

    // Find form in control's parents
    static bool FindForm(ref Control c)
    {
        while (c != null)
        {
            if (c is Form)
                return true;
            c = c.Parent;
        }
        return false;
    }
}

0 个答案:

没有答案