2011-04-05 86 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)....