开发者

Not checking for control key pressed properly

开发者 https://www.devze.com 2023-02-22 06:04 出处:网络
I got this timer tick function: Private Sub controlTick(ByVal sender As Object, ByVal e As EventArgs) Label2.Text = (Control.ModifierKeys = Keys.Control)

I got this timer tick function:

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

That is supposed to make my label say "True" if I am currently holding down the Control key, and "False" if I am not.

But, how come my label is always "False"? What is interesting is that if I press the Control key at lighting speed a bunch of times I can see for a fraction of a second "True", but immediately turns to "False".

Timer ticks every 50ms.

I do not und开发者_运维知识库erstand.... any ideas?


I can't reproduce the behavior you describe... I tried creating a new WinForms project, placed a Label control on the middle of the form, and added a Timer control.

Whenever I press the Ctrl key, the label reads True. Otherwise, it reads False. Exactly the behavior you would expect to see. I don't have to press anything at lightning speed.

(Edit: It doesn't break when more controls are placed on the form either. What are you doing differently?)

My code looks like this:

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

Only difference is that you're apparently compiling without type checking enabled (Option Strict Off).
I always prefer to code in VB.NET with this turned on (check your project's Properties window), in which case you have to explicitly convert the boolean type to a string type using ToString.


I have created a winform application to prove this.. I am using the form and I have set the "KeyPreview" property to true and for every key pressed I get the code correctly.

Please check again using the way I mentioned and let me know if it resolves.

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

Also for Control key the code is (e.KeyCode == Keys.ControlKey)....


I'm not sure this will help, but try using HasFlag, because maybe there is some other flag in ModifierKeys which is also on:

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

0

精彩评论

暂无评论...
验证码 换一张
取 消