CF keyDown事件(定时)

时间:2010-05-11 08:08:35

标签: compact-framework

我的CF应用程序需要一个事件,在用户按住控制按钮2秒后触发该事件。我可以使用什么事件,因为已经使用了keyDown事件。

1 个答案:

答案 0 :(得分:2)

嗯,KeyDown与捕捉手指按下的时间长度无关。手指的使用与事件ClickMouseDownMouseUpMouseMove有关。

要获得您所追求的行为,您应该感兴趣的事件是MouseDownMouseUp

我建议最好的方法是创建自己的控件基类。这是我之前制作的(没有经过测试,但应该让你大致了解该怎么做):

public partial class BaseControl : UserControl
{
    public BaseControl()
    {
        InitializeComponent();

        base.MouseDown += new MouseEventHandler(BaseControl_MouseDown);
        base.MouseUp += new MouseEventHandler(BaseControl_MouseUp);

        MouseHeldTimer = new Timer();
        MouseHeldTimer.Interval = 2000;
        MouseHeldTimer.Tick += new EventHandler(mouseHeldTimer_Tick);

    }

    protected Timer MouseHeldTimer;
    protected bool MouseIsDown;

    void mouseHeldTimer_Tick(object sender, EventArgs e)
    {
        this.MouseHeldTimer.Enabled = false;
        if (this.MouseHeldDown != null)
        {
            this.MouseHeldDown(sender, e);
        }
    }

    void BaseControl_MouseDown(object sender, MouseEventArgs e)
    {
        this.MouseHeldTimer.Enabled = true;
    }

    void BaseControl_MouseUp(object sender, MouseEventArgs e)
    {
        this.MouseHeldTimer.Enabled = false;
    }

    public event MouseHeldDownHandler MouseHeldDown;
    public delegate void MouseHeldDownHandler(object sender, EventArgs e);

}

基本上,当用户用手指触摸屏幕时,MouseHeldTimer将以2秒的间隔开始。如果用户抬起手指,则计时器停止。如果用户的手指停止时间超过2秒,则会触发委托事件MouseHeldDown。然后,您可以通过执行以下操作在表单上捕获此事件:

control.MouseHeldDown+= new EventHandler(control_MouseHeldDown);

或者,如果您只关心表单,则可以使用表单的DoubleClick事件,因为在将鼠标按住一两秒后会触发该事件。