所有子控件分别接收鼠标事件。作为一种选择,您可以为所有控件订阅所需的鼠标事件,并为您的用户控件引发所需的鼠标事件。
例如,在下面的代码中,我提升了容器Click
, DoubleClick
, MouseClick
, MouseDoubleClick
and 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));
}