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

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

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

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


person Niklas Winde    schedule 04.02.2009    source источник
comment
Вы можете опубликовать соответствующий код?   -  person hmcclungiii    schedule 04.02.2009
comment
Я мог бы быть в состоянии, но я чувствую, что это немного сложно. Сначала я подожду еще немного ответов и посмотрю, смогу ли я изолировать код.   -  person Niklas Winde    schedule 04.02.2009


Ответы (2)


Я не уверен, используете ли вы 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.

person Jarrod    schedule 05.02.2009
comment
Это обычная форма Windows. Спасибо за ваш ответ - я попробую это на выходных, и если у меня не получится, я опубликую код того, что я делаю. - person Niklas Winde; 06.02.2009

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

person Jarrod    schedule 04.02.2009