Решение состоит в том, чтобы проверить, находится ли указатель мыши над нашим элементом управления или нет в каждом обработчике событий.
Следующий вспомогательный метод скажет нам, находится ли указатель мыши над элементом управления (будь то UserControl или стандартный элемент управления)
private bool IsMouseOver(Control control)
{
return control.ClientRectangle.Contains(control.PointToClient(MousePosition));
}
Протестировав возвращаемое значение этого метода, мы можем определить в событии MouseLeave, что мышь все еще находится над нашим пользовательским элементом управления, и соответственно управлять видимостью кнопки:
private void UserControl1_MouseLeave(object sender, EventArgs e)
{
if (!IsMouseOver(this))
{
button1.Visible = false;
}
}
private void UserControl1_MouseEnter(object sender, EventArgs e)
{
if (IsMouseOver(this))
{
button1.Visible = true;
}
}