using System;
using System.ComponentModel;
using System.Windows.Forms;
public partial class RepeatButton : Button
{
#region メンバフィールド
private bool mouseDown = false;
private ulong count = 0;
private Timer timer = new Timer();
private IContainer components = null;
#endregion
#region プロパティ
[Category("動作"), Description("リピートクリックイベント発生の間隔(ミリ秒単位)を設定または取得します。")]
public int Interval
{
get
{
return timer.Interval;
}
set
{
timer.Interval = value;
}
}
[Category("その他"), Description("リピートクリックが連続で発生した回数を取得します。")]
public ulong Count
{
get
{
return count;
}
}
#endregion
#region コンストラクタ
public RepeatButton()
{
InitializeComponent();
}
public RepeatButton(IContainer container)
{
container.Add(this);
InitializeComponent();
}
#endregion
#region オーバーライドメソッド
protected override void Dispose(bool disposing)
{
if (disposing && (components != null)) components.Dispose();
base.Dispose(disposing);
}
#endregion
#region プライベートメソッド
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
MouseUp += new MouseEventHandler(RepeatButton_MouseUp);
MouseDown += new MouseEventHandler(RepeatButton_MouseDown);
timer.Tick += new EventHandler(RepeatButtonTimer_Tick);
timer.Start();
}
#endregion
#region イベントハンドラ
void RepeatButton_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
count = 0;
}
void RepeatButton_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
}
void RepeatButtonTimer_Tick(object sender, EventArgs e)
{
if (mouseDown == true)
{
if (count < ulong.MaxValue) ++count;
PerformClick();
}
}
#endregion
}