У меня есть приложение С#.NET 2.0 WinForms. Мое приложение имеет элемент управления, который представляет собой контейнер для двух дочерних элементов управления: ярлык и какой-то элемент управления редактированием. Вы можете думать об этом так, где внешний блок является родительским элементом управления:
+---------------------------------+ | [Label Control] [Edit Control] | +---------------------------------+
Я пытаюсь что-то сделать, когда мышь входит или выходит из родительского элемента управления, но мне все равно, перемещается ли мышь в один из его дочерних элементов. Я хочу, чтобы один флаг представлял "мышь где-то внутри родителя или детей" и "мышь перемещалась за пределы родительского контроля".
Я попытался обработать MouseEnter и MouseLeave на родительском и обоих дочерних элементах управления, но это означает, что действие начинается и заканчивается несколько раз, когда мышь перемещается по элементу управления. Другими словами, я получаю следующее:
Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop) Child.OnMouseEnter (start doing something) Child.OnMouseLeave (stop) Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop)
Промежуточные события OnMouseLeave вызывают некоторые нежелательные эффекты, так как все, что я делаю, запускается, а затем останавливается. Я хочу этого избежать.
Я не хочу захватывать мышь, поскольку родитель получает указатель мыши, потому что дочерние элементы управления нуждаются в событиях мыши, и я хочу, чтобы меню и другие сочетания клавиш работали.
Есть ли способ сделать это внутри платформы .NET? Или мне нужно использовать крючок для мыши Windows?