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

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

该代码适用于ButtonTextBox

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

我还尝试在ToolStrip上侦听MouseLeave事件,并执行与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;
    }
}

转载请注明来自askonline.tech,本文标题:c# - 鼠标在ToolStrip上快速拖动以移动表单


 Top