窗体上放置一个按钮,属性Default设置为true,其原理究竟是什么?

ynduanlian 2010-07-22 10:34:57
如果在窗体上放置一个文本输入框,放置一个按钮,并将按钮default属性设置为True,那么在文本输入框获是焦点时输入Enter键,回车,自动相当于点击按钮。
比如:
Private Sub Command1_Click()
MsgBox Text1.Text
End Sub
当我在TextBox1中输入“ABC”时,输入回车,会弹出对话框“ABC”

但是当我用另一段程序来模拟这个动作时:
Text1.Text = Text1.Text & vbCrLf
却不会弹出对话框,模拟不出这样的效果。问题出在什么地方?

...全文
791 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinaboyzyq 2010-07-22
  • 打赏
  • 举报
回复
当命令按钮的 Default 设置为 True 而且其父窗体 是活动的,用户可以按 ENTER 键选择该按钮(激活其单击事件)。任何其它有焦点 的控件都不接受 ENTER 键的键盘事件(KeyDown,KeyPress或 KeyUp),除非用户将焦点移到同一窗体的另外一个命令按钮上。在这种情况下,按 ENTER 键选择有焦点的命令按钮而不是缺省命令按钮。


Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101

Private Sub Command1_Click()
MsgBox Text1
End Sub

Private Sub Form_Click()
PostMessage Me.hwnd, WM_KEYDOWN, 13, 0
End Sub
ynduanlian 2010-07-22
  • 打赏
  • 举报
回复
终于搞明白了default=true后,响应的是key_down事件,把WM_CHAR改为WM_KEYDOWN就OK了
PostMessage Me.hwnd, WM_KEYDOWN, 13, 1

WM_CHAR消息--> Key_Press事件
ynduanlian 2010-07-22
  • 打赏
  • 举报
回复
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_CHAR = &H102

Private Sub Command2_Click()
PostMessage Me.hwnd, WM_CHAR, 13, 1
End Sub

直接在同一个窗体中向窗体发送 回车符 也不能模拟出这个过程
这个做法为什么不行?
chinaboyzyq 2010-07-22
  • 打赏
  • 举报
回复
设置command1的default属性设置为True,单击窗体测试以上程序。

SendKeys "~"是发送一个回车
bancxc 2010-07-22
  • 打赏
  • 举报
回复
.[Quote=引用 2 楼 chinaboyzyq 的回复:]
Private Sub Command1_Click()
MsgBox Text1.Text
End Sub

Private Sub Form_Click()
SendKeys "~"
End Sub

--------------------------
说明

窗体中只能有一个命令按钮可以为缺省命令按钮。当某个命令按钮的 Default 设置为 True 时,窗……
[/Quote]
chinaboyzyq 2010-07-22
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
MsgBox Text1.Text
End Sub

Private Sub Form_Click()
SendKeys "~"
End Sub

--------------------------
说明

窗体中只能有一个命令按钮可以为缺省命令按钮。当某个命令按钮的 Default 设置为 True 时,窗体中其它的命令按钮自动设置为 False。当命令按钮的 Default 设置为 True 而且其父窗体 是活动的,用户可以按 ENTER 键选择该按钮(激活其单击事件)。任何其它有焦点 的控件都不接受 ENTER 键的键盘事件(KeyDown,KeyPress或 KeyUp),除非用户将焦点移到同一窗体的另外一个命令按钮上。在这种情况下,按 ENTER 键选择有焦点的命令按钮而不是缺省命令按钮。

对于支持如删除等不可恢复操作的窗体或对话框,将取消按钮的 Default 属性设置成 True,使其成为缺省命令按钮。

对于 OLE 容器控件,只为那些行为象 CommandButton 控件的对象才有 Default 属性。
ynduanlian 2010-07-22
  • 打赏
  • 举报
回复
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_CHAR = &H102

Private Sub Command2_Click()
PostMessage Me.hwnd, WM_CHAR, 13, 1
End Sub

直接在同一个窗体中向窗体发送 回车符 也不能模拟出这个过程

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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