【问题标题】:How to handle mouse events from user control while ignoring those of its controls如何处理来自用户控件的鼠标事件,同时忽略其控件的事件
【发布时间】:2017-05-16 17:42:15
【问题描述】:

Screen of my user control

我有一个包含一些控件的用户控件(黑色矩形)。 当鼠标悬停在用户控件上时,我想在红色矩形中显示两个图像。

目前我已经实现了用户控件的 mouseEnter(显示图像)和 mouseLeave(隐藏图像)事件。

问题是当鼠标悬停在另一个控件(例如标签)时,来自用户控件的 mouseLeave 事件被触发并且图像消失。

我可以为所有控件实现鼠标进入/鼠标离开事件,但这似乎是浪费时间、大量重复数据删除和内存使用率低。 我还考虑过禁用其他控件的事件,但不知道该怎么做,这似乎更像是一种黑客行为。我试图禁用控件,但颜色发生了变化,又是一次肮脏的黑客攻击。

如果鼠标悬停在其控件之一上,也许我可以阻止触发用户控件 mouseLeave 事件?

我确信有一个正确的方法可以做到这一点,但无法弄清楚。

如果有人想出更好的标题,我会改变它。

感谢您的帮助,

问候

【问题讨论】:

  • 如果是 Windows 窗体,为什么不直接枚举 mainUserControl.Controls 并检查事件中是否有 Focused? IE。在mouseLeave 事件中,如果有孩子专注,则不要触发更改。
  • 这个thread 可能对你想做的事情有用。

标签: c# winforms user-controls


【解决方案1】:

非常感谢你们两位。 你为我指明了正确的方向。

我最终只是简单地将 ControlUser.MouseEnter 事件注册到所有控件:

foreach (Control control in Controls)
{
     control.MouseEnter += new EventHandler(this.MyUserControl_MouseEnter);
}

简单高效,完美。

【讨论】:

    猜你喜欢
    • 2012-06-27
    • 2023-02-14
    • 1970-01-01
    • 2010-09-10
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2013-11-07
    相关资源
    最近更新 更多