C#切换控件可见性导致按钮绑定事件失效问题咨询
问题原因
切换控件Visible属性不会移除设计器绑定的事件订阅,你遇到的「事件失效」是触发逻辑导致的假象:
当鼠标移入Panel触发按钮显示后,只要鼠标移动到显示出的Button子控件区域,系统会判定鼠标已经离开Panel的客户区,立刻执行MouseLeave的隐藏逻辑,按钮在你完成点击操作前就被隐藏,你实际点击的是Panel空白区域,自然不会触发按钮的绑定事件。
解决方案
修改MouseLeave事件的判断逻辑,仅当鼠标真的移动到Panel边界外部时再隐藏子控件:
private void _Display_MouseEnter(object sender, EventArgs e) { foreach (Control C in _Display.Controls) { C.Visible = true; } } private void _Display_MouseLeave(object sender, EventArgs e) { // 转换鼠标坐标到Panel客户区坐标系 Point currentMousePos = _Display.PointToClient(Cursor.Position); // 仅当鼠标真的移出Panel范围时才隐藏按钮 if (!_Display.ClientRectangle.Contains(currentMousePos)) { foreach (Control C in _Display.Controls) { C.Visible = false; } } }
如果你的Panel有多层嵌套子控件,可以额外在所有子控件的MouseEnter事件里也复用_Display_MouseEnter逻辑,避免极端场景下的闪烁问题。
内容的提问来源于stack exchange,提问作者dannyhut
相关产品推荐
相关产品推荐

