我有一个C#.NET 2.0 WinForms应用程序。我的应用程序有一个控件,它是两个子控件的容器:标签和某种编辑控件。你可以认为它像这样,在外包装盒是家长控制:家长控制鼠标进入/离开活动与儿童自控
+---------------------------------+ | [Label Control] [Edit Control] | +---------------------------------+
我想,当鼠标进入或离开父控件做一些事情,但我不在乎,如果鼠标移动成为其中的一个孩子。我想要一个标志来表示“鼠标在父或子内部的某个位置”和“鼠标已经移到父控制边界之外”。
我已经试过处理的MouseEnter和鼠标离开的父母和两个孩子的控制,但这意味着行动开始和结束多次作为整个控制鼠标移动。换句话说,我得到这个:
Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop) Child.OnMouseEnter (start doing something) Child.OnMouseLeave (stop) Parent.OnMouseEnter (start doing something) Parent.OnMouseLeave (stop)
中间OnMouseLeave在事件导致一些不想要的效果无论我做得到启动,然后停止。我想避免这种情况。
我不想捕获鼠标作为父在获取鼠标,因为孩子需要控制他们的鼠标事件,我想菜单等快捷键的工作。
有没有办法做到这一点。NET框架内?或者我需要使用Windows鼠标钩子?
如果我离开当前的父母,我不知道提前我要进入一个孩子控制或真的离开父母。如果我按你的建议做了,那么父母OnMouseLeave必须说“嗨,这是我,所以继续处理”,所以移动到控制之外而不是另一个控制不会停止处理。 – 2009-07-21 22:54:50
这是一个很好的观点,尽管如果您的控制遏制结构不必过于灵活,即n级遏制和/或您考虑了父类型,那么您仍然可以使用此方法。 例如,您会收到一个enter事件,然后您控制它来自哪里,然后向上移动遏制树,直到看到GroupBox或Panel(包含按钮的任何内容)并评估该值的引用。当它改变时。 – 2009-07-22 14:16:16