// Наследуемся от класса Button и добавляем новую функциональность
using System;
using System.Windows.Forms;

public class DoubleClickButton : System.Windows.Forms.Button
{
    // Свойство DoubleClickTime получает время в миллисекундах, 
    // разрешенное для определения двойного щелчка 
    int previousClick = SystemInformation.DoubleClickTime;

    public new event EventHandler DoubleClick;

    protected override void OnClick(EventArgs e)
    {
        int now = System.Environment.TickCount;

        // Двойной щелчок будет засчитан, если уложится в отведенное время
        if (now - previousClick <= SystemInformation.DoubleClickTime)
        {
            // Raise the DoubleClick event.
            if (DoubleClick != null)
                DoubleClick(this, EventArgs.Empty);
        }

        // Устанавливаем значение previousClick в значение now для определения двойного щелчкаs
        previousClick = now;

        // Разрешаем базовому классу иметь обычный метод Click
        base.OnClick(e);
    }

    // Для события DoubleClick
    protected new virtual void OnDoubleClick(EventArgs e)
    {
        if (this.DoubleClick != null)
            this.DoubleClick(this, e);
    }
}