В некоторых случаях вам нужны свойства мыши (местоположение, щелчки ..), поэтому вы используете событие mousedoubleclicks, в других случаях они вам не понадобятся, поэтому система может сохранить несколько байтов и повысить производительность.
НапримерПриложение, приведенное ниже, является почти чистым GDI, поэтому, когда я щелкаю в каком-то месте, мне так важно, чтобы у меня были свойства мыши ...

Обновление
Вы правы в:
1 : Ни в одном случае, когда двойной клик не вызывается, а mousedoubleclick нет, и наоборот, потому что я декомпилировал класс управления в .Net 3.5, иобнаружил, что единственное место, где возникают события отбоя, находится в том же месте onmouseup с некоторыми условиями:
private void WmMouseUp(ref Message m, MouseButtons button, int clicks)
{
try
{
int x = NativeMethods.Util.SignedLOWORD(m.LParam);
int y = NativeMethods.Util.SignedHIWORD(m.LParam);
Point p = new Point(x, y);
p = this.PointToScreen(p);
if (!this.GetStyle(ControlStyles.UserMouse))
{
this.DefWndProc(ref m);
}
else if (button == MouseButtons.Right)
{
this.SendMessage(0x7b, this.Handle, NativeMethods.Util.MAKELPARAM(p.X, p.Y));
}
bool flag = false;
if ((((this.controlStyle & ControlStyles.StandardClick) == ControlStyles.StandardClick) && this.GetState(0x8000000)) && (!this.IsDisposed && (UnsafeNativeMethods.WindowFromPoint(p.X, p.Y) == this.Handle)))
{
flag = true;
}
if (flag && !this.ValidationCancelled)
{
if (!this.GetState(0x4000000))
{
this.OnClick(new MouseEventArgs(button, clicks, NativeMethods.Util.SignedLOWORD(m.LParam), NativeMethods.Util.SignedHIWORD(m.LParam), 0));
this.OnMouseClick(new MouseEventArgs(button, clicks, NativeMethods.Util.SignedLOWORD(m.LParam), NativeMethods.Util.SignedHIWORD(m.LParam), 0));
}
else
{
this.OnDoubleClick(new MouseEventArgs(button, 2, NativeMethods.Util.SignedLOWORD(m.LParam), NativeMethods.Util.SignedHIWORD(m.LParam), 0));
this.OnMouseDoubleClick(new MouseEventArgs(button, 2, NativeMethods.Util.SignedLOWORD(m.LParam), NativeMethods.Util.SignedHIWORD(m.LParam), 0));
}
}
this.OnMouseUp(new MouseEventArgs(button, clicks, NativeMethods.Util.SignedLOWORD(m.LParam), NativeMethods.Util.SignedHIWORD(m.LParam), 0));
}
finally
{
this.SetState(0x4000000, false);
this.SetState(0x8000000, false);
this.SetState(0x10000000, false);
this.CaptureInternal = false;
}
}
2 : вызов обработчика не вызывается, если не существует обработчика:
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected virtual void OnMouseDoubleClick(MouseEventArgs e)
{
MouseEventHandler handler = (MouseEventHandler) base.Events[EventMouseDoubleClick];
if (handler != null)
{
handler(this, e);
}
}