Cómo: Crear un evento Double-Click personalizado

Actualización: noviembre 2007

.NET Compact Framework no admite el evento DoubleClick de formularios Windows Forms para un botón. Sin embargo, puede crear un control que se derive de la clase Button para implementar el evento.

Para crear un evento Double-Click personalizado

  1. Cree una clase que se derive de la clase System.Windows.Forms.Button.

  2. Declare un evento DoubleClick.

  3. Reemplace el método OnClick con código que genere el evento DoubleClick cuando los clics se realicen dentro del intervalo de tiempo especificado.

Ejemplo

Este ejemplo crea un control personalizado DoubleClickButton y lo implementa en un formulario.

using System;
using System.Windows.Forms;
using System.Drawing;

namespace ButtonDClick
{
    public class Form1 : System.Windows.Forms.Form
    {
        // Track the number of 
        // double-clicks with the count variable.
        int count = 0;

        public Form1()
        {
            InitializeComponent();

            // Display OK button for closing.
            this.MinimizeBox = false;

            // Create an instance of the DoubleClickButton class.
            DoubleClickButton dClickB = new DoubleClickButton();

            dClickB.Bounds = new Rectangle(10,10,200,30);
            dClickB.Text = "Double-click me!";
            Controls.Add(dClickB);

            // Add the DClick event hander to the DoubleClick event.
            dClickB.DoubleClick += new EventHandler(DClick);
        }

        protected override void Dispose( bool disposing )
        {
            base.Dispose( disposing );
        }

        private void InitializeComponent()
        {
            this.Text = "Form1";
        }

        private void DClick(object o, EventArgs e)
        {
            // Display the number of double-clicks.
            MessageBox.Show("Double-click count = " + ++count);
        }

        static void Main() 
        {
            Application.Run(new Form1());
        }

        // Derive a button with extended funtionality
        // from the Button class.
        public class DoubleClickButton : System.Windows.Forms.Button 
        { 
            // Note that the DoubleClickTime property gets 
            // the maximum number of milliseconds allowed between 
            // mouse clicks for a double-click to be valid.
            int previousClick = SystemInformation.DoubleClickTime;

            public new event EventHandler DoubleClick;

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

                // A double-click is detected if the the time elapsed
                // since the last click is within DoubleClickTime.
                if ( now - previousClick <= SystemInformation.DoubleClickTime)
                {
                    // Raise the DoubleClick event.
                    if (DoubleClick != null)
                        DoubleClick(this,EventArgs.Empty);
                }

                // Set previousClick to now so that 
                // subsequent double-clicks can be detected.
                previousClick = now;

                // Allow the base class to raise the regular Click event.
                base.OnClick(e);
            }

            // Event handling code for the DoubleClick event.
            protected new virtual void OnDoubleClick(EventArgs e)
            {
                if (this.DoubleClick != null)
                    this.DoubleClick(this, e);
            }
        }
    }
}

Compilar el código

Para este ejemplo se requieren referencias a los siguientes espacios de nombres:

Vea también

Conceptos

Desarrollo de controles personalizados