2011-04-05 88 views
0

我得到這個計時器滴答功能:不檢查控制鍵按下正確

Private Sub controlTick(ByVal sender As Object, ByVal e As EventArgs) 
    Label2.Text = (Control.ModifierKeys = Keys.Control) 
End Sub 

是應該讓我的標籤說「真」如果我目前按住Control鍵,與「假「如果我不是。

但是,我的標籤怎麼總是「假」?有趣的是,如果按照照明速度下的Control鍵,我可以看到幾分之一秒的「True」,但立即變成「False」。

計時器每50ms檢測一次。

我不明白....任何想法?

+0

你想要達到什麼目的?如果你使用WinForms,你可以通過按鍵/上/下事件來實現這個...爲什麼要定時器? – sajoshi 2011-04-05 04:35:04

+0

定時器只是一個測試... 那麼,我需要的是能夠檢查何時控制鍵* * *。這就是我需要的。我在過去使用按鍵/上/下時遇到問題。 http://stackoverflow.com/questions/5532525/form-keypress-help – Voldemort 2011-04-05 04:37:44

回答

3

我無法重現您所描述的行爲......我試圖創建一個新的WinForms項目,在窗體中間放置了一個Label控件,並添加了一個Timer控件。

每當我按Ctrl鍵時,標籤讀數爲True。否則,它讀取False。確切地說,你期望看到的行爲。我不必以閃電般的速度按任何東西。

(編輯:它當更多控件放置在窗體上要麼你在做什麼不同不破?)

我的代碼如下所示:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 
    ' Start the timer 
    Timer1.Enabled = True 
End Sub 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    ' Update the label 
    Label1.Text = (Control.ModifierKeys = Keys.Control).ToString 
End Sub 

唯一的區別是你顯然沒有啓用類型檢查編譯(Option Strict Off)。
總是喜歡在VB.NET中打開代碼(檢查您的項目的屬性窗口),在這種情況下,您必須使用ToString將布爾類型顯式轉換爲字符串類型。

0

我不知道這會幫助,但嘗試使用HasFlag,因爲也許有在ModifierKeys一些其他的標誌,這也是上:

http://msdn.microsoft.com/en-us/library/system.enum.hasflag.aspx

+0

你不小心鏈接到這個問題。 – 2011-04-05 09:43:06

+0

Thanks @Cody,我編輯了答案,並意外發現了另一個我不知道的功能 - 「HasFlag」。 – 2011-04-06 05:56:07

+0

是的,但值得注意的是'HasFlag'是在.NET 4.0中引入的。它在早期版本中不可用。 – 2011-04-06 06:28:40

1

我創建了一個WinForm應用程序來證明這一點..我使用的形式,我已經將「KeyPreview」屬性設置爲true,並按下每個鍵我正確地得到代碼。

請使用我提到的方式再次檢查,並告訴我它是否解決。

private void Form1_KeyDown(object sender, KeyEventArgs e) { MessageBox.Show(e.KeyCode.ToString()); }

而且對於控制鍵的代碼是(e.KeyCode == Keys.ControlKey)....