C # mouseleave и mouseenter событие не будет срабатывать при нажатии кнопки мыши - PullRequest
6 голосов
/ 28 августа 2011

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

 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 - это бул, чтобы знать, нажата ли левая кнопка.

Проблема :

События выхода и ввода не будут срабатывать, если кнопка мыши нажата.

Ответы [ 2 ]

7 голосов
/ 28 августа 2011

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

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

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

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

0 голосов
/ 28 августа 2011

Я не думаю, что [mousedraw] мог бы преуспеть

click = mouseDown + mouseUp 

,

When mouseDown :  mousedraw = false;

When mouseUp :    mousedraw = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...