求救: KeyDown事件对Enter键的响应问题?

strXiaoCaiNiao 2005-03-25 01:10:43
请问大侠:
下面代码中,KeyDown事件对Enter键为什么有时候不会响应?(很少的时候,按Enter没有响应,按其它键可以执行):
Private Sub txtDescription_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtDescription.KeyDown
Try
If e.KeyCode = Keys.Enter Then
SendKeys.Send("{Tab}")
End If
Catch ex As Exception
PFMessage(publicVal.PubPromptType.OtherError, ex.Message)
End Try
End Sub
MSDN上说,好像要重写IsInputKey方法,但为什么大多数情况下又可以用呢?
(MSDN: ... Certain keys, such as the TAB, RETURN, ESCAPE, and arrow keys are handled by controls automatically. In order to have these keys raise the KeyDown event, you must override the IsInputKey method in each control on your form ...)

另外,窗体的KeyPreview已设为True,测试时焦点也在txtDescription中

先谢谢各位!分不够可以再加!
...全文
538 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzmdegm 2005-03-28
  • 打赏
  • 举报
回复
Private Sub TextBox1_KeyPress1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Chr(13) Then
e.Handled = True
'System.Windows.Forms.SendKeys.Send("{TAB}")
Me.Label5.Text = Me.TextBox1.Text
End If
End Sub
tihua 2005-03-28
  • 打赏
  • 举报
回复
来晚了,不知能否给点分用用,谢谢 :)
strXiaoCaiNiao 2005-03-28
  • 打赏
  • 举报
回复
谢谢各位,周末结贴

分不够,再加100
strXiaoCaiNiao 2005-03-28
  • 打赏
  • 举报
回复
UP
QQRN 2005-03-26
  • 打赏
  • 举报
回复
其实用KeyPress就很简单啊,就按cdbqss1(胖胖) 的方法即可。将你的KeyDown事件改为KeyPress事件。
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
zzmdegm 2005-03-26
  • 打赏
  • 举报
回复
如何让它只对“Enter”键起作用呢?
zzmdegm 2005-03-26
  • 打赏
  • 举报
回复
up
feihu_02 2005-03-26
  • 打赏
  • 举报
回复
同意楼上
cdbqss1 2005-03-25
  • 打赏
  • 举报
回复
我刚刚做了一个用户控件,是写在keypress事件中的。
Public Class BqUTxt
Inherits System.Windows.Forms.TextBox
Private Sub BqUTxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
If e.KeyChar = Chr(13) Then
e.Handled = True
System.Windows.Forms.SendKeys.Send("{TAB}")
End If
End Sub
Private Sub BqUTxt_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.GotFocus
sender.SelectAll()
End Sub
End Class
机器人 2005-03-25
  • 打赏
  • 举报
回复
如 TAB、RETURN、ESCAPE 和箭头键,由控件自动处理。为使这些键引发 KeyDown 事件,必须在窗体上的每个控件中重写 IsInputKey 方法。
ray680719 2005-03-25
  • 打赏
  • 举报
回复
up
weiljj 2005-03-25
  • 打赏
  • 举报
回复
(MSDN)為使這些按鍵能引發 KeyDown 事件,您必須覆寫表單上每一個控制項的 IsInputKey 方法。
---要重寫所有的控件,恐怕很難接受這種方式.
很奇怪.
我試的時候,當FORM的KeyPrview=False,我試了很多遍,都沒有出現樓主的現象.
當FORM的KEYPRVIEW=TRUE,并且給FORM設了缺省按鈕時,TEXTBOX就總拿不到ENTER的KEYDOWN事件(這可以理解).
我不明白我為什麼試不出樓主的狀況.
tihua 2005-03-25
  • 打赏
  • 举报
回复
同意重写
zhangzhijian 2005-03-25
  • 打赏
  • 举报
回复
up
strXiaoCaiNiao 2005-03-25
  • 打赏
  • 举报
回复
TO: xfyxq(小小旗) (抵制日货)
谢谢你
不重写的话
有时就不能响应吗?
xfyxq 2005-03-25
  • 打赏
  • 举报
回复
没错,要重写IsInputKey,

Protected Overrides Function IsInputKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case keyData
Case Keys.Enter '捕获Enter键
Case Else '其它键的控制权判定交给系统
Return MyBase.IsInputKey(keyData)
End Select
Return True '对于在Select Case分支中指定的按键,判定它为一个常规键.
End Function
strXiaoCaiNiao 2005-03-25
  • 打赏
  • 举报
回复
TO:xxuu503(2005年CSDN MVH(Most Valuable Hemorrhoiders))
谢谢你
奇怪的是
同样的代码
同样的操作
偶尔没有响应

还可能是什么原因呢?
strXiaoCaiNiao 2005-03-25
  • 打赏
  • 举报
回复
TO:hamadou(闵峰)
谢谢你
是的
但绝大部分情况下是可以用的
也就是按Enter时,让光标跳到下一输入框
hamadou 2005-03-25
  • 打赏
  • 举报
回复
呵呵,没有经历过,不过命令键在某些控件中才响应的。例如datagrid,一般来说,对于一个文本框应该不会吧?你的txtDescription是一个文本框吧?
xxuu503 2005-03-25
  • 打赏
  • 举报
回复
某些键做为快捷键存在是存在着优先级的

processcmdkey>key

快捷键高于任何普通键

如果一个键被processcmdkey的处理事件捕获了(其实就是作为快捷键存在)

那么普通的keypress是接受不到他的存在的

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧