[已解决]如何让GUICtrlCreateInput跳到下一个GUICtrlCreateInput
本帖最后由 ator916 于 2014-12-26 10:26 编辑假设我创建两个GUICtrlCreateInput,
当我输入完第一个GUICtrlCreateInput的内容后,按下回车键,
要如何自动跳到下一个GUICtrlCreateInput,继续输入。
最佳解答:#6 lanfengc大大[附教学代码]
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=46587&pid=607156&fromuid=7664094 回复 1# ator916
按TAB鍵就可以 指定热键就可以额~~ 获取键盘消息,捕捉到enter键被按下的时候,转换控件焦点 谢谢大大的回答,指定热键就可以了,但当程式执行时..enter键= tab键。
有什么办法抓出键盘光标,正在GUICtrlCreateInput输入状态中呢?
这样就可以避免其他情形下,按到回车键变成Tab键。 回复 5# ator916
如下所示,希望你能学到点什么
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
Opt("GUIOnEventMode", 1) ;使用事件驱动模式
$Form = GUICreate("Enter 焦点切换例子", 285, 72, 192, 114) ;创建窗体
$Input1 = GUICtrlCreateInput("Input1", 8, 8, 249, 21) ;创建第一个输入框
$Input2 = GUICtrlCreateInput("Input2", 8, 40, 249, 21) ;创建第二个输入框
$Button = GUICtrlCreateButton("",-100,-100,1,1) ;创建一个隐藏的 按钮
Dim $Form_AccelTable = [["{ENTER}", $Button],["{TAB}", $Button]] ;设置快捷键 entertab设置tab 的作用是为了阻止tab切换到 按钮控件上去
GUISetAccelerators($Form_AccelTable) ;设置窗口的快捷键表
GUISetOnEvent($GUI_EVENT_CLOSE, "FormClose") ;注册窗口关闭事件函数
GUICtrlSetOnEvent($Button, "ButtonClick") ;注册按钮事件函数
GUISetState(@SW_SHOW) ;显示窗体
While 1
Sleep(100)
WEnd
Func FormClose() ;窗体关闭操作
Exit
EndFunc
Func ButtonClick() ;按钮事件函数
;获取当前激活的控件句柄
Local $nowFocusInputHandle=ControlGetHandle($Form,"",ControlGetFocus($Form))
;获取 Input1 的句柄
Local $Input1Handle=ControlGetHandle($Form,"",$Input1)
;获取 Input2 的句柄
Local $Input2Handle=ControlGetHandle($Form,"",$Input2)
;如果 当前激活的是 input1 则将焦点设置为 input2 并选中input2中的所有内容
If $nowFocusInputHandle=$Input1Handle Then
ControlFocus($Form,"",$Input2)
_SendMessage($Input2Handle, $EM_SETSEL, 0, StringLen(GUICtrlRead($Input2)))
;如果 当前激活的是 input2 则将焦点设置为 input1 并选中input1中的所有内容
ElseIf $nowFocusInputHandle=$Input2Handle Then
ControlFocus($Form,"",$Input1)
_SendMessage($Input1Handle, $EM_SETSEL, 0, StringLen(GUICtrlRead($Input1)))
EndIf
EndFunc
回复 6# lanfengc
谢谢lanfengc大大,给了这么好的一个范例代码。
创建一个隐藏的按钮的方法,满妙的。
重点还是在ControlGetFocus,我完全懂了。
一段清晰易读的代码,谢谢分享。
页:
[1]