Когда возникает событие DoubleClick, кроме как для двойного щелчка мышью? - PullRequest
3 голосов
/ 22 февраля 2012

Документация для события MouseDoubleClick состояний

Важно

События DoubleClick являются логически высокоуровневыми событиями элемента управления. Они могут быть вызваны другими действиями пользователя, такими как сочетания клавиш.

Однако мне не удалось найти элемент управления, который вызывает событие DoubleClick в ситуациях, когда MouseDoubleClick также не вызывается, а документация для события DoubleClick не упомянуть что-либо тоже. Когда это используется?

1 Ответ

0 голосов
/ 22 февраля 2012

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

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

enter image description here

Обновление

Вы правы в:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...