У меня есть приложение WinForms на C # .NET 2.0. Мое приложение имеет элемент управления, который является контейнером для двух дочерних элементов управления: метки и некоторого элемента управления редактирования. Вы можете думать об этом так, где внешний блок является родительским элементом управления:
+---------------------------------+
| [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 Framework? Или мне нужно использовать крючок мыши для Windows?