CF keyDown事件(定时)

CF keyDown事件(定时)

问题描述:

我需要为我的CF应用程序提供一个事件,这会在用户按住手指按住控件两秒钟后触发。我可以使用什么事件,因为keyDown事件已经被使用。CF keyDown事件(定时)

+0

是的,泰克你提醒我!我非常学习C#和所有的框架,我完全忘记接受anwser :) – no9 2010-05-13 07:03:43

那么,KeyDown对于捕获手指按下的时间长度来说是非常不相关的。手指的使用涉及事件ClickMouseDown,MouseUpMouseMove

为了得到你想要的行为,你应该感兴趣的事件是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事件作为将按住鼠标下来了之后火第二或两个。

+0

thanx为anwser。是的,我犯了一个错误,写了钥匙而不是鼠标。您的解决方案完美运作 – no9 2010-05-13 07:02:37