MouseHover and MouseLeave don't work when the control is invisible

安稳与你 提交于 2020-01-10 05:42:25

问题


For some reason MouseHover and MouseLeave functions behave really strange. All I need to do is, when the cursor is over the "button", I want to make the button visible and when the cursor leaves the button, I want to make it invisible. Whatever I try I couldn't make it work. It seems like Mouse events not working when the control object is invisible.

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

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

回答1:


Well... that's how it works. Continue handling the button's MouseLeave event and handle MouseMove for its parent (I assume the form):

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



回答2:


Put the button onto a Panel that's sized and positioned to exactly contain the button. Then hook MouseEnter and MouseLeave on the panel. Show/hide the button; leave the panel always visible so it can get the mouse events.




回答3:


As the terse comment suggests, invisible objects are not recognized by the mouse, because they "aren't there".




回答4:


That's how it works; invisible controls do not respond to mouse events.

How about reconsidering your design? An invisible control that only appears when the mouse scrolls over it just screams "hard to use". I could understand a few child controls appearing when hovering over a parent container or control, but not a lone button, invisible until found purely by luck. You could always just wrap the button in another container and handle the container's mouse events.



来源:https://stackoverflow.com/questions/6513601/mousehover-and-mouseleave-dont-work-when-the-control-is-invisible

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!