Событие MouseUp прервано? - PullRequest
       9

Событие MouseUp прервано?

0 голосов
/ 04 февраля 2009

Я делаю пользовательский элемент управления с панелью. Я хочу иметь возможность перетаскивать его, поэтому я реализовал это в событии MouseDown моего элемента управления. Но я хочу, чтобы вещь реагировала, когда вы начинаете перетаскивать, чтобы дать небольшую обратную связь пользователю. Так что в MouseDown даже я меняю цвет. Затем я хочу изменить его обратно в событии MouseUp.

Мой элемент управления не установлен в VS2008, а только класс, который я написал, который я создаю во время выполнения (я не знаю заранее, сколько мне нужно, и так далее). Теперь мой элемент управления выставляет событие MouseDown, чтобы его можно было перетаскивать. Когда я подписываюсь на это событие из родительского приложения для фактического выполнения перетаскивания, мой элемент управления не перерисовывается в событии MouseUp! На самом деле, MouseUp никогда не вызывается. Если, с другой стороны, я не подписываюсь на событие в родительском приложении, оно работает как положено.

Что происходит? Родитель прерывает поток так, что событие MouseUp никогда не срабатывает в моем элементе управления? Как мне обойти это?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2009

Я не уверен, используете ли вы Windows Forms или WPF, но в формах Windows вот что я имею в виду:

public class DerivedPanel : Panel
{
    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        Capture = true;
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        Capture = false;
        // Change your color or whatever here
    }
}

В WPF есть два метода, CaptureMouse () и ReleaseMouseCapture (), чтобы сделать то же самое. Когда элемент управления захватывает мышь, он получает события мыши, даже если курсор не находится над элементом управления. Это может быть причиной вашей проблемы. См. MSDN Статья

0 голосов
/ 04 февраля 2009

Захватываете ли вы мышь в пользовательском элементе управления событием mousedown? Попробуйте захватить mousedown и отпустить захват мышью.

...