It's because, by default, your control captures mouse. Just set Control.Capture to false
somewhere in your MouseDown
event handler, for example:
void MouseDown(object sender, MouseEventArgs e) {
this.Capture = false;
}
As alternative just check in MouseUp
that mouse is still inside your control:
void MouseUp(object sender, MouseEventArgs e) {
if (ClientRectangle.Contains(PointToClient(Cursor.Position))) {
// Your code here
}
}