1

C# でクリックにマウスホバーを使用していますが、クリックする前に 2 ~ 3 秒待機する必要があり、カーソルがボタンに 2 秒以上留まらないとクリックしません。

4

1 に答える 1

2

Buttonクラスから派生させることで、その機能を実装できます。

using System;
using System.Windows.Forms;

namespace MouseHoverDelay
{
    public class HoverButton : Button
    {
        protected System.Timers.Timer timer;

        public bool IsHoverEnabled { get; set; }
        public double Delay { get; set; }

        public event System.Timers.ElapsedEventHandler TimerElapsed
        {
            add
            {
                timer.Elapsed += value;
            }
            remove
            {
                timer.Elapsed -= value;
            }
        }

        public HoverButton()
        {
            // defaults: hover trigger enabled with 3000 ms delay
            IsHoverEnabled = true;
            Delay = 3000;

            timer = new System.Timers.Timer
            {
                AutoReset = false,
                Interval = Delay
            };
        }

        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);

            if (IsHoverEnabled)
            {
                timer.Start();
            }
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);

            timer.Stop();
        }
    }
}

Delayフォームに追加した後、フォームのメソッド内にハンドラー メソッドを設定する必要がありますInitializeComponent()

this.btnHoverTest.Delay = 2000;
this.btnHoverTest.TimerElapsed += timer_Elapsed;

次に、ハンドラーを次の形式で実装します。

using System;
using System.Windows.Forms;

namespace MouseHoverDelay
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // triggers when Delay milliseconds have passed since hovering mouse over control
        protected void timer_Elapsed(object o, EventArgs e)
        {
            MessageBox.Show("Hovered for 2 seconds!");
        }
    }
}
于 2012-06-05T15:34:33.337 に答える