我做了一个Keypress的事件,但如果在keypress 事件执行中再单击按键,便会在执行完这次的keypress事件后接着执行下一次keypress 事件,有没有办法令到在执行keypress事件的期间按键无效,直到执行完后再按键才会再次执行keypress事件。
照你这做法,比如我连双击,还是会执行两次Keypress事件,因为两按一次键,keypress事件就会排在之前的一次keypress事件后面。而我希望是在处理keypress事件期间,所有的按键信息都会无效。请问还有其它办法吗,谢谢。
能告诉我怎样令按钮的enabled=false 吗?谢谢。
追答你的按钮应该有名称吧?就是
按钮名称.enabled = false
VB.net按钮名称默认是 button1、button2这样的,以前的VB6是什么不记得了。
执行完后,再
按钮名称.enabled = true
照你这方法,按钮(BUTTON)是可以,但我问的按键KEYPRESS) 不行,打keypress.eneable 会有error。请问是什么原因?
追答哦,不好意思,我搞错了。
这样的话应该是在执行的期间屏蔽按键信息,如果用API函数应该很容易处理,但我也不熟,你可以百度一下“ API函数 屏蔽按键信息”,不过这样可能会产生其他副作用。
可以设想一个简单的方法,如果你的key事件是在textbox之类的控件里引发的,则引发后启用窗体的keypreview属性,这样窗体会优先拦截按键信息,应该就不会给控件接收到。或者引发事件后移开控件的焦点。如果你的事件就是窗体的事件,那试试把整个窗体的enable给false了。
对了,如果是控件的事件,应该也可以把控件的enabled给false掉,这样应该也接收不到按键事件的。
谢谢了,不过我发现就算是按钮(button), 我enabled = false 以后我用鼠标对着按钮按3下,仍然会执行3次button事件,这又是什么原因呢?
追答按钮false后,会变成灰色的,鼠标按了根本没有反应的,就是不会有塌下去那个样子,怎么会有事件?如果按钮变灰色,但还有click事件响应,那可以去找微软公司报告了。应该是按钮名称弄错了吧?
追问enable =false后是没错变灰色了,不过在变灰色的时候按按钮,比如按3下,等enable= true 后仍会执行3次button的。因为我看见在enable
= true后按钮会自动按下,所以我怀疑按按钮的次数被记下了,enable
=false 后只延迟了按按钮的时间。
不会的。你要把enable =false这句话放在整个执行的最前面,就是要禁止按钮后才能做其他事,否则,你点了按钮后,还来不及false,已经去执行其他事情,那么这时还是会记录你的click。
整个过程应该这样.
sub button1_Click(...) handle...
button1.enable = false
这里开始复杂的过程
button1.enable =true
end sun
对了,试试在button1.enable = false后加上一句
application.doevents
我的代码是下面这样的,的确在灰的时候按按钮也会记数的。是我打错了吗,还是system sleep 的问题
Button1.Enabled = False
Dim g As Graphics = Me.CreateGraphics()
g.DrawImage(NewBitmap("C:\A.bmp"),0, 0)
System.Threading.Thread.Sleep(5000)
g.DrawImage(NewBitmap("C:\B.bmp"),0, 0)
System.Threading.Thread.Sleep(5000)
Button1.Enabled = True
我试了一下,如果在中间用个msgbox弹出来一下,则无论怎么点都只会弹出来一次,即没有记数。
如果用textbox显示,则会记数。不过插入application.doevents这句话可以避免,只是这句话的插入需要考虑插入位置。如果是大循环,则必须插入在循环中,按你这个程序,必须每个sleep一个,即
Application.DoEvents()
System.Threading.Thread.Sleep(5000)
Application.DoEvents()
System.Threading.Thread.Sleep(5000)
Application.DoEvents()
因为doevents的作用就是去相应你的鼠标的,当最后一句doevents执行的时候,enable还是false的,这时可以把所有鼠标计数释放掉,由于按钮还是false状态,所以不会发生事件。只要最后一句doevents执行后才enable为true,就不会出现计数问题。另外注意doevents会增加运行时间。
这个方法比较笨,但简单,您也可以考虑用API
有关VB.NET keypress 事件的问题
Private run As Boolean = False'过程是否在运行 Private Key_L As Boolean = False'L键是否按下 变通方法:加定时器,要执行的过程放在定时器中调用 keypress事件只检测某个键是否按下 在家里没有VS,引用我以前的例子给你,定义的是全局键盘,也就是在程序不激活的状态也能执行 下面是完整代码:...
vb.net keypress 回车不响应
应该使用KeyDown事件。使用e对象来定位键符!代码参考:Private Sub ListBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles ListBox1.KeyDown If e.KeyCode = Keys.Enter Then End If End Sub ...
VB.NET中keypress、keydown、keyup事件有什么区别?e.keychar和e.keycode...
keypress:操作窗格具有焦点并按下某个键时发生,不能由非字符键引发 keydown:按下键盘按键时发生 keyup:键盘按键弹起时发生 以上事件触发的时间不同,顺序 down press up keychar:按键对应的字符 keycode:获取 KeyDown 或 KeyUp 事件的键盘代码 char不能获取 控制键如tab Insert delete 方向键等 ...
VB.NET全局键盘和鼠标钩[Vb.Net钩]
`KeyboardHookProc`函数处理键盘事件,根据事件类型(如键按下、键释放或系统键)调用相应的事件处理逻辑,如`KeyDown`, `KeyPress`, `KeyUp`。通过事件处理程序执行特定操作或逻辑响应。总结 以上代码展示了在VB.NET中实现全局键盘和鼠标挂钩的完整流程,包括常量定义、事件委托处理、挂钩创建与销毁、以及...
vb.net,datagridview单元格内打字时,单元格下拉显示SQL数据库搜索结果...
代码太长太复杂了,解释起来还麻烦,只能给个思路,自己研究吧!1。在datagridview中的keyPress事件中设置处理过程 2。处理过程为每次读取当前单元格(CurrentCell)的内容,查询SQL数据库 3。将查询结果放入一个代码创建的ComboBox的列表中
vb.net的textbox中可以正常输入英文数字切换到中文输入法一按键就退出...
PrivateSubText1_KeyPress(KeyAsciiAsInteger)If((KeyAscii>=48AndKeyAscii=65AndKeyAscii=97AndKeyAscii<=122))=FalseThenKeyAscii=0EndSub
vb.net计算器如何从键盘输入
在Form_KeyPress事件中检测按键,对应数字和功能键
vb.net 方向键不能触发 keydown 事件
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean If keyData = Keys.Left Or keyData = Keys.Right Or keyData = Keys.Up Or keyData = Keys.Down Then Return False'如果是方向键返回FALSE,意思是继续执行form的keydown事件.Else Return MyBase.ProcessDialogKey(...
vb.net中textbox输入完后如何直接按回车
思路很简单:通过textbox的keypress事件来捕获键盘输入,输入输入的是回车键,则调用Button_click事件 代码如下:Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If e.KeyCode = 13 Then call Button1_Click()end if...
VB.NET:键盘控制焦点移动
编写一个方法 代码如下: FocusMove Is Function Name ControlName Is the Control s Name Which you want to use Private Sub FocusMove()Sub FocusMove(ByVal sender As Object ByVal e As System Windows Forms KeyPressEventArgs) Handles ControlName KeyPress ControlName KeyPress If e KeyChar...