I am not a “smart client” programmer and probably not even a
smart client programmer and this trick has probably been around for ages, but …
For someone who’s been doing WPARAM and LPARAM acrobatics for years and
still vividly recalls what (not necessarily good) you can do with WM NCPAINT
and WM NCMOUSEMOVE (all that before I discovered the blessings of the
server-side), it’s pretty annoying that Windows Forms doesn’t
bubble events – mouse events specifically. It is actually hard to believe
that that wouldn’t work. But I’ve read somewhere that bubbling
events is “new in Whidbey”, so it is probably not my ignorance. Anyways
… include the following snippet in your form (add MouseDown, MouseUp, …
variants at your leisure), bind the respective events of all labels, panels and
all the other “dead stuff” to this very handler (yes, all the
controls share that handler) and that’ll have the events bubble up to
your form in case you need them. I am just implementing custom resizing and
repositioning for some user controls in a little tool and that’s how I
got trapped into this. Voilá. Keep it.
protected
void BubbleMouseMove(object
sender, System.Windows.Forms.MouseEventArgs e)
{
Point pt = this.PointToClient(((Control)sender).PointToScreen(new Point(e.X,e.Y)));
MouseEventArgs me = new
MouseEventArgs(e.Button,e.Clicks,pt.X,pt.Y,e.Delta);
OnMouseMove(sender,me);
}