找回密码
 加入
搜索
查看: 3016|回复: 6

[GUI管理] [已解决]如何让GUICtrlCreateInput跳到下一个GUICtrlCreateInput

  [复制链接]
发表于 2014-12-25 14:40:00 | 显示全部楼层 |阅读模式
本帖最后由 ator916 于 2014-12-26 10:26 编辑

假设我创建两个GUICtrlCreateInput,
当我输入完第一个GUICtrlCreateInput的内容后,按下回车键,
要如何自动跳到下一个GUICtrlCreateInput,继续输入。




最佳解答:#6 lanfengc大大[附教学代码]
http://www.autoitx.com/forum.php ... amp;fromuid=7664094

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2014-12-25 14:42:40 | 显示全部楼层
回复 1# ator916
按TAB鍵就可以
发表于 2014-12-25 15:03:07 | 显示全部楼层
指定热键就可以额~~
发表于 2014-12-25 15:18:25 | 显示全部楼层
获取键盘消息,捕捉到enter键被按下的时候,转换控件焦点
 楼主| 发表于 2014-12-25 19:29:52 | 显示全部楼层
谢谢大大的回答,指定热键就可以了,但当程式执行时..enter键= tab键。
有什么办法抓出键盘光标,正在GUICtrlCreateInput输入状态中呢?
这样就可以避免其他情形下,按到回车键变成Tab键。
发表于 2014-12-25 20:10:26 | 显示全部楼层
回复 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[2][2] = [["{ENTER}", $Button],["{TAB}", $Button]]        ;设置快捷键 enter  tab  设置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
 楼主| 发表于 2014-12-26 10:20:15 | 显示全部楼层
回复 6# lanfengc


    谢谢lanfengc大大,给了这么好的一个范例代码。
创建一个隐藏的按钮的方法,满妙的。
重点还是在ControlGetFocus,我完全懂了。
一段清晰易读的代码,谢谢分享。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-28 18:50 , Processed in 0.170498 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表