鼠标悬停和鼠标离开在控件不可见时不起作用

本文关键字:鼠标 不起作用 控件 悬停 离开 | 更新日期: 2023-09-27 18:00:33

出于某种原因,鼠标悬停和MouseLeave函数的行为非常奇怪。我需要做的就是,当光标在"按钮"上时,我想使按钮可见,当光标离开按钮时,我想使其不可见。无论我尝试什么,我都无法让它工作。当控件对象不可见时,鼠标事件似乎不起作用。

private void button1_MouseHover(object sender, EventArgs e)
{
   button1.Visible = true;
}
private void button1_MouseLeave(object sender, EventArgs e)
{
    button1.Visible = false;
}

鼠标悬停和鼠标离开在控件不可见时不起作用

这就是它的工作原理。一种选择是继续以相同的方式处理按钮的MouseLeave事件,并为其父级处理MouseMove(我假设形式(:

private void Form_MouseMove(object sender, MouseEventArgs e) {
    if (button1.Bounds.Contains(e.Location) && !button1.Visible) {
        button1.Show();
    }
}

将按钮放在大小和位置以正好包含按钮的Panel上。然后钩MouseEnterMouseLeave面板。显示/隐藏按钮;使面板始终可见,以便它可以获取鼠标事件。

正如简洁的评论所暗示的那样,鼠标无法识别不可见的对象,因为它们"不存在"。

这就是它的工作原理;不可见的控件不响应鼠标事件。

重新考虑您的设计怎么样? 一个不可见的控件,仅在鼠标滚动时出现,只是尖叫"难以使用"。 我可以理解将鼠标悬停在父容器或控件上时出现的一些子控件,但不能理解一个单独的按钮,在纯粹靠运气找到之前不可见。 您始终可以将按钮包装在另一个容器中并处理容器的鼠标事件。