В некоторых случаях вам нужны свойства мыши (местоположение, клики ..), поэтому вы используете событие mousedoubleclicks, в других случаях они вам не понадобятся, поэтому система может сэкономить несколько байтов и повысить производительность.
Например, ниже приложения почти чистый GDI, так что, когда я нажимаю какое-то место, это настолько важно, что у меня есть свойства мыши ...
Update
Вы правы in:
: Нет случая, когда двойной клик поднят, ERSA, потому что я декомпилировал класс управления в .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;
}
}
: вызов обработчика не вызываются если никакой обработчик не существует:
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected virtual void OnMouseDoubleClick(MouseEventArgs e)
{
MouseEventHandler handler = (MouseEventHandler) base.Events[EventMouseDoubleClick];
if (handler != null)
{
handler(this, e);
}
}
Нажмите, тем более очевидным, вы можете нажать кнопку, нажав пробел. * Разрешено * для управления вызывать OnDoubleClick на любом входном событии, не обязательно означает, что имеет смысл это сделать. –
@HansPassant Я знаю, нажатие Enter дано в качестве примера в документации 'MouseClick'. Я могу представить себе некоторые ситуации, когда «OnDoubleClick» имеет смысл, один из которых нажимает Enter в «ListView». Однако в тех, которые я могу придумать, это на самом деле не происходит. – hvd
Стандартные элементы управления .NET этого не делают. Не могу говорить за десятки тысяч других. –