VB.NET如何使控件不能响应KeyDown事件
我已将窗体的KeyPreview属性改为True,然后在窗体的KeyDown事件中处理所有键盘事件,这样在窗体具有焦点时就可以用了。但是,如果窗体上有一个Button的话...
我已将窗体的KeyPreview属性改为True,然后在窗体的KeyDown 事件中处理所有键盘事件,这样在窗体具有焦点时就可以用了。但是,如果窗体上有一个Button 的话,程序就会在执行完窗体的KeyDown 事件后又响应了Button 的KeyDown 事件。我试过在窗体的KeyDown 事件中写e.Handled =True 来告诉程序已经处理过此键盘事件了,但没用。所以要怎么样才能屏蔽或禁用掉控件的KeyDown 事件啊?对了,如果是一个文本框正在编辑可不能屏蔽它的KeyDown 事件,不然没法输入了,这可以在窗体的KeyDown 事件中判断如果是焦点在文本框上则退出KeyDown 事件。所以关键是怎么让Button 不能响应键盘事件。
展开
3个回答
展开全部
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
If sender Is Me Then MsgBox(e.KeyData.ToString & vbCrLf & sender.ToString)
End Sub
Private Sub Button1_KeyDown(sender As Object, e As KeyEventArgs) Handles Button1.KeyDown
If sender Is Me Then MsgBox(e.KeyData.ToString & vbCrLf & sender.ToString)
End Sub
这样就行了,第一个过程if语句结果为真,第二个过程if语句结果为假,你的所有问题都可通过if判断语句解决,msgbox代码只是做个测试,实际为你响应form键盘事件的代码。
If sender Is Me Then MsgBox(e.KeyData.ToString & vbCrLf & sender.ToString)
End Sub
Private Sub Button1_KeyDown(sender As Object, e As KeyEventArgs) Handles Button1.KeyDown
If sender Is Me Then MsgBox(e.KeyData.ToString & vbCrLf & sender.ToString)
End Sub
这样就行了,第一个过程if语句结果为真,第二个过程if语句结果为假,你的所有问题都可通过if判断语句解决,msgbox代码只是做个测试,实际为你响应form键盘事件的代码。
展开全部
因为当焦点在button和textbox上时,button和textbox本身会响应键盘事件,此时form就不响应了,如果你希望即使在文本框输入文字时,也要响应热键,那就要做全局热键监控,具体方法请百度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要明确你究竟想响应哪些控件的事件,根据你上面的描述似乎你只需要统一的整个Form的KeyDown 事件,因此设置了KeyPreview属性改为True后就不需要写其他控件的事件了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询