Быстро перетащите мышь на ToolStrip, чтобы переместить форму - PullRequest
0 голосов
/ 10 февраля 2019

Я работаю над функцией перемещения формы путем перетаскивания дочернего элемента управления с помощью события мыши.

Код хорошо работает для Button, TextBox.

Но когда япримените его к 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;
    }
}
...