按住不放可以在一定时间间隔内重复发生mouserDown事件的按钮。
按住不放可以在一定时间间隔内重复发送mouserDown事件的按钮。
源代码如下:
/// <summary> /// 按住不放可以在一定时间间隔内重复发送mouserDown事件的按钮。 /// </summary> public partial class ReapterButton:Button { #region Attributes private Timer timer; private MouseEventArgs meArgs; #endregion #region Properties /// <summary> /// 计时器初始延迟时间,按钮初次按下与重复事件之间间隔的毫秒数 /// </summary> [DefaultValue(400)] [Category("selfDefine")] [Description("计时器初始延迟时间,按钮初次按下与重复事件之间间隔的毫秒数")] public int InitDelay { get; set; } /// <summary> /// 重复事件之间的事件间隔,单位:毫秒 /// </summary> [DefaultValue(400)] [Category("selfDefine")] [Description("重复事件之间的事件间隔,单位:毫秒")] public int Intervals { get; set; } #endregion #region Construtor public ReapterButton() { InitializeComponent(); timer = new Timer(components); timer.Tick += new EventHandler(timer_Tick); InitDelay = 400; } #endregion #region Methods /// <summary> /// 一定事件间隔后重复触发mouserDown事件.如果事件是初次发生则在delay时间后发生 /// 以后每次迭代的时间间隔为Interva /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void timer_Tick(object sender, EventArgs e) { base.OnMouseDown(meArgs); if (timer.Enabled) { timer.Interval = Intervals; } else { timer.Interval = InitDelay; } timer.Enabled = true; } /// <summary> /// 引发计时器控件,并在Delay时间后初次引发mouserDown事件 /// </summary> /// <param name="mevent"></param> protected override void OnMouseDown(MouseEventArgs mevent) { meArgs = mevent; base.OnMouseDown(mevent); timer.Enabled = false; timer_Tick(this, EventArgs.Empty); } /// <summary> /// 使得计时器失效 /// </summary> /// <param name="mevent"></param> protected override void OnMouseUp(MouseEventArgs mevent) { base.OnMouseUp(mevent); timer.Enabled = false; } #endregion }
请大家正解。