C#WinForms MouseHover和MouseLeave问题

时间:2011-06-28 21:59:47

标签: c# button visible mousehover

由于某些原因,MouseHover和MouseLeave函数表现得非常奇怪。我需要做的就是,当光标在“按钮”上方时,我想让按钮可见,当光标离开按钮时,我想让它不可见。无论我尝试什么,我都无法使它发挥作用。当控件对象不可见时,似乎鼠标事件不起作用。

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

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

4 个答案:

答案 0 :(得分:7)

嗯......这就是它的运作方式。继续处理按钮的MouseLeave事件,并为其父级处理MouseMove(我假设表单):

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

答案 1 :(得分:1)

正如简短的评论所暗示的那样,鼠标无法识别隐形物体,因为它们“不存在”。

答案 2 :(得分:1)

将按钮放在Panel上,其大小和位置确切地包含按钮。然后在面板上挂钩MouseEnterMouseLeave。显示/隐藏按钮;让面板始终可见,以便它可以获得鼠标事件。

答案 3 :(得分:0)

它是如何运作的;不可见的控件不响应鼠标事件。

如何重新考虑您的设计?一个看不见的控件,只有当鼠标滚过它时才出现,只是尖叫"难以使用"。我可以理解当悬停在父容器或控件上时出现的一些子控件,但不是一个单独的按钮,只有在运气之前才能看到它。您可以随时将按钮包装在另一个容器中并处理容器的鼠标事件。