C#Windows窗体鼠标事件问题中的自定义控件
我有一个用于Panel控件的mouseenter和mouseleave事件,当鼠标进入时会改变背景颜色,当它离开时会返回白色。
我也在此面板中有Label控件,但当鼠标进入Label控件时,面板的mouseleave事件将触发。
这是有道理的,但是当鼠标位于其区域而其他控件不会影响它时,如何保持Panel的背景颜色相同?
您可以使用GetChildAtPoint()来确定鼠标是否在子控件上。
private void panel1_MouseLeave(object sender, EventArgs e) { if (panel1.GetChildAtPoint(panel1.PointToClient(MousePosition)) == null) { panel1.BackColor = Color.Gray; } }
如果控件实际上不是子控件,您仍然可以使用MousePosition和PointToScreen来确定鼠标是否仍在控件的范围内。
private void panel1_MouseLeave(object sender, EventArgs e) { Rectangle screenBounds = new Rectangle(this.PointToScreen(panel1.Location), panel1.Size); if (!screenBounds.Contains(MousePosition)) { panel1.BackColor = Color.Gray; } }
为包含的控件添加事件意味着当您想要向面板添加另一个控件时,您也必须执行相同的练习。
为父控件添加事件意味着只要您想在其他位置使用面板,就必须为新父控件执行相同的操作。 当面板的要求发生变化时,您必须记住将处理从父控件的事件中取出。
所有潜在的混乱都在线下。
我倾向于在面板的鼠标离开事件中进行一些坐标检查,并且只有在鼠标真的超出面板边界时才重置面板颜色。
这样,您的面板处理代码仅保留在相关面板上。
我找到了一个简单的解决方 我只是在标签上将enabled属性设置为false,这很好。
您可以为标签添加MouseEnter事件,该事件也设置Panel的背面颜色。 您不需要标签的MouseLeave事件。
要么:
- 为Panel设置MouseEnter事件以设置Panel的背景颜色。
- 设置Panel的父控件(例如Form)MouseEnter事件以重置Panel的背面颜色。
如果您想在不触及父控件代码的情况下执行上述第2点(根据其他用户的注释),您可以在Panel的ParentChanged事件中执行以下操作:
上述就是C#学习教程:C#Windows窗体鼠标事件问题中的自定义控件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private void panel1_ParentChanged(object sender, EventArgs e) { Panel thisPanel = sender as Panel; if(thisPanel != null && thisPanel.Parent != null) { thisPanel.Parent.MouseEnter += delegate(object senderObj, EventArgs eArgs) { thisPanel.BackColor = SystemColors.Control; }; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/936183.html