2010-05-11 49 views
1

我需要爲我的CF應用程序提供一個事件,這會在用戶按住手指按住控件兩秒鐘後觸發。我可以使用什麼事件,因爲keyDown事件已經被使用。CF keyDown事件(定時)

+0

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

回答

2

那麼,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