По сути, вы хотите проверить, находится ли курсор в области видимости элемента управления. Вот решение:
(1) Добавьте Panel
в форме того же размера, что и ваш Form
, и переместите все элементы управления в форме на панель. Это легко изменить: откройте MyForm.designer.cs
, добавьте панель и измените все операторы, например this.Controls.Add(myLabel);
на this.myPanel.Controls.Add(myLabel);
.
(2) Обработайте события MouseEnter
и MouseLeave
панели, которую вы добавили.
myPanel.MouseEnter += (sender, e) =>
{
//enter
};
myPanel.MouseLeave += (sender, e) =>
{
if (Cursor.Position.X < myPanel.Location.X
|| Cursor.Position.Y < myPanel.Location.Y
|| Cursor.Position.X > myPanel.Location.X + myPanel.Width
|| Cursor.Position.Y > myPanel.Location.Y + myPanel.Height)
{
//out of scope
}
};
(3) Почему бы не использовать Form
на шаге 2? Зачем нам нужен Panel
с таким же размером? Попробуй сам. Узкая граница формы сведет вас с ума.
(4) Вы можете сделать операторы if
на шаге 2 для метода расширения, который полезен для дальнейшего использования.