我设计了一个包含多个控件的用户控件。我将用户控件拖放到窗体上,然后为其设置鼠标悬停事件,以便在某个地方显示评论。
但是有一个问题,用户应该将鼠标悬停在UserControl容器上以查看该评论,如果他将鼠标悬停在UserControl中的一个控件上,就不会发生任何事情。
如何将鼠标悬停(或其他事件)设置为在UserControl及其所有子节点上引发?
发布于 2018-06-16 07:55:23
所有子控件分别接收鼠标事件。作为选项,您可以为所有控件订阅所需的鼠标事件,并为用户控件引发所需的鼠标事件。
例如,在下面的代码中,当相应的事件发生在控件层次结构中的任何子级时,我已经引发容器Click、DoubleClick、MouseClick、MouseDoubleClick和MouseHover事件:
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));
}https://stackoverflow.com/questions/50885842
复制相似问题