C# mouseleave и mouseenter событие не будет срабатывать, если нажать кнопку мыши

названия говорят все. У меня есть панель, которая действует как белая доска. При перемещении мыши нарисуйте дорожку мыши.. работает отлично, но если мышь покидает края панели, я хочу вызвать событие мыши вверх и событие мыши вниз, если мышь листья или входит группа а левая кнопка нажата

 private void panel2_MouseLeave(object sender, EventArgs e)
    {
        if (mousedraw == true)
        {
            panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0));
        }
    }

    private void panel2_MouseEnter(object sender, EventArgs e)
    {
        if (mousedraw == true)
        {
            panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0));
        }
    }

mousedraw является bool, чтобы узнать, нажата ли левая кнопка.

в

2 ответов


mouseenter и mouseLeave не срабатывают при нажатии кнопки. Однако, когда кнопка в конечном итоге освобождается, соответствующее событие mouseEnter или mouseLeave срабатывает, если мышь вошла или вышла из панели, пока кнопка была выключена. Пока кнопка нажата, событие mouseMove будет продолжать работать, даже за пределами панели. Это позволяет мыши продолжать перетаскивание или что-то еще, даже после того, как она проходит за пределами границы элемента управления, и является самым Приложения Windows работают.

Если вы можете использовать это поведение в своем приложении, это будет более "стандартный" пользовательский интерфейс.

Если вам определенно нужно запустить mouseUp, когда мышь покидает панель, вы можете проверить местоположение мыши в событии mouseMove и вызвать mouseUp, когда он находится вне панели, и кнопка нажата. В обработчике MouseMove вы можете использовать e.X и e.Y для местоположения и e.Кнопка для статуса кнопки.

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


Я не думаю, что [mousedraw] может сделать хорошо

click = mouseDown + mouseUp 

и

When mouseDown :  mousedraw = false;

When mouseUp :    mousedraw = true;