首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测鼠标对用户控件和所有子程序- C# WinForms

问检测鼠标对用户控件和所有子程序- C# WinForms
EN

Stack Overflow用户
提问于 2018-06-16 07:21:52
回答 1查看 2.9K关注 0票数 0

我设计了一个包含多个控件的用户控件。我将用户控件拖放到窗体上,然后为其设置鼠标悬停事件,以便在某个地方显示评论。

但是有一个问题,用户应该将鼠标悬停在UserControl容器上以查看该评论,如果他将鼠标悬停在UserControl中的一个控件上,就不会发生任何事情。

如何将鼠标悬停(或其他事件)设置为在UserControl及其所有子节点上引发?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-16 07:55:23

所有子控件分别接收鼠标事件。作为选项,您可以为所有控件订阅所需的鼠标事件,并为用户控件引发所需的鼠标事件。

例如,在下面的代码中,当相应的事件发生在控件层次结构中的任何子级时,我已经引发容器Click、DoubleClick、MouseClick、MouseDoubleClick和MouseHover事件:

代码语言:javascript
复制
public UserControl1() {
    InitializeComponent();
    WireMouseEvents(this);
}
void WireMouseEvents(Control container) {
    foreach (Control c in container.Controls) {
        c.Click += (s, e) => OnClick(e);
        c.DoubleClick += (s, e) => OnDoubleClick(e);
        c.MouseHover += (s, e) => OnMouseHover(e);

        c.MouseClick += (s, e) => {
            var p = PointToThis((Control)s, e.Location);
            OnMouseClick(new MouseEventArgs(e.Button, e.Clicks, p.X, p.Y, e.Delta));
        };
        c.MouseDoubleClick += (s, e) => {
            var p = PointToThis((Control)s, e.Location);
            OnMouseDoubleClick(new MouseEventArgs(e.Button, e.Clicks, p.X, p.Y, e.Delta));
        };

        WireMouseEvents(c);
    };
}

Point PointToThis(Control c, Point p) {
    return PointToClient(c.PointToScreen(p));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50885842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档