HOW TO:建立自訂的按兩下事件

更新:2007 年 11 月

.NET Compact Framework 不支援按鈕的 Windows Form DoubleClick 事件。但是,您可以建立從 Button 類別衍生的控制項,來實作事件。

若要建立自訂的按兩下事件

  1. 建立從 System.Windows.Forms.Button 類別衍生的類別。

  2. 宣告 DoubleClick 事件。

  3. 若按鈕按下動作會於指定時間內發生,則以引發 DoubleClick 事件的程式碼來覆寫 OnClick 方法。

範例

這個範例會建立 DoubleClickButton 自訂控制項,並在表單上實作此控制項。

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);
            }
        }
    }
}

編譯程式碼

這個範例需要下列命名空間的參考:

請參閱

概念

自訂控制項開發