找回密码
 加入
搜索
查看: 2457|回复: 14

[网络通信] [已解决]关于回车键切换combo控件焦点的问题

[复制链接]
发表于 2018-8-25 12:59:28 | 显示全部楼层 |阅读模式
本帖最后由 king8462 于 2018-8-26 14:08 编辑

http://www.autoitx.com/forum.php ... 3%B5%2B%C7%D0%BB%BB

http://www.autoitx.com/forum.php ... 3%B5%2B%C7%D0%BB%BB

论坛找到上面两个例子,当我把Input控件改成combo控件后,按回车无法切换到下一个控件,请各位高手看看,谢谢!
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("test", 247, 158, 216, 188)
$Label1 = GUICtrlCreateLabel("用户名:", 16, 16, 43, 17)
$User = GUICtrlCreateCombo("", 72, 16, 169, 21)

$Label2 = GUICtrlCreateLabel("密码:", 24, 56, 31, 17)
$Password = GUICtrlCreateInput("", 72, 54, 169, 21)
$Button1 = GUICtrlCreateButton("确定", 80, 112, 89, 33)
GUISetState(@SW_SHOW)
GUICtrlSetData($User,"a")
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $User
                        GUICtrlSetState($Password,$GUI_FOCUS)
                Case $Password
                        GUICtrlSetState($Button1,$GUI_FOCUS)
        EndSwitch
WEnd
发表于 2018-8-26 11:15:38 | 显示全部楼层
king8462 发表于 2018-8-26 11:07
A版能在3楼的代码中给点提示吗,谢谢了。
#include <GUIConstants.au3>

$Form1 = GUICreate('test', 247, 158)
$Label1 = GUICtrlCreateLabel('用户名:', 16, 16, 43, 17)
$User = GUICtrlCreateCombo('', 72, 16, 169, 21)
GUICtrlSetData(-1, "a|bb|ccc")
$Label2 = GUICtrlCreateLabel('密码:', 24, 56, 31, 17)
$Password = GUICtrlCreateCombo('b', 72, 54, 169, 21)
$Button1 = GUICtrlCreateButton('确定', 80, 112, 89, 33)
GUISetState(@SW_SHOW)
GUIRegisterMsg(0x111, '_WM_COMMAND')

Do
        Local $msg = GUIGetMsg()
Until $msg = -3 Or $msg = $Button1

Func _WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        If Not $ilParam And BitAND($iwParam, 0xFFFF) = 1 Then
                If ControlGetFocus($Form1) = 'Edit1' Then GUICtrlSetState($Password, $GUI_FOCUS)
                If ControlGetFocus($Form1) = 'Edit2' Then GUICtrlSetState($Button1, $GUI_FOCUS)
        EndIf
EndFunc   ;==>_WM_COMMAND

评分

参与人数 1金钱 +10 收起 理由
king8462 + 10 很给力!

查看全部评分

发表于 2018-8-25 13:57:07 | 显示全部楼层
我运行正常,不清楚你问的是什么?
 楼主| 发表于 2018-8-25 14:05:12 | 显示全部楼层
chzj589 发表于 2018-8-25 13:57
我运行正常,不清楚你问的是什么?

抱歉,我没说清楚,是按回车无法切换到下一个控件,不是无法运行代码。
发表于 2018-8-25 14:12:06 | 显示全部楼层
king8462 发表于 2018-8-25 14:05
抱歉,我没说清楚,是按回车无法切换到下一个控件,不是无法运行代码。

你点击$User = GUICtrlCreateCombo就跳到$Password = GUICtrlCreateInput
还需要?
 楼主| 发表于 2018-8-25 14:17:24 | 显示全部楼层
chzj589 发表于 2018-8-25 14:12
你点击$User = GUICtrlCreateCombo就跳到$Password = GUICtrlCreateInput
还需要?

没明白意思
发表于 2018-8-25 14:22:17 | 显示全部楼层





本帖子中包含更多资源

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

×
 楼主| 发表于 2018-8-25 14:24:34 | 显示全部楼层

哦,明白了!能不能实现手动输入一些内容,然后回车切换下一个控件。有些内容combo下拉列表没有,需要手动输入。
 楼主| 发表于 2018-8-25 14:30:28 | 显示全部楼层
#include <GUIConstants.au3>

$Form1 = GUICreate('test', 247, 158)
$Label1 = GUICtrlCreateLabel('用户名:', 16, 16, 43, 17)
$User = GUICtrlCreateCombo('', 72, 16, 169, 21)
GUICtrlSetData(-1, "a|bb|ccc")
;GUICtrlSetState($User, $GUI_FOCUS)
$Label2 = GUICtrlCreateLabel('密码:', 24, 56, 31, 17)
$Password = GUICtrlCreateCombo('b', 72, 54, 169, 21)
$Button1 = GUICtrlCreateButton('确定', 80, 112, 89, 33)
GUISetState(@SW_SHOW)
GUIRegisterMsg(0x111, '_WM_COMMAND')

Do
        Local $msg = GUIGetMsg()
Until $msg = -3 Or $msg = $Button1

Func _WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
        If Not $ilParam Then
                Local $hc, $aRt, $id
                If BitAND($iwParam, 0xFFFF) <> 1 Then
                        $id = BitAND($iwParam, 0xFFFF)
                        If $id = $User Then GUICtrlSetState($Password, $GUI_FOCUS)
                        If $id = $Password Then GUICtrlSetState($Button1, $GUI_FOCUS)
                Else
                        $aRt = DllCall('user32.dll', 'hwnd', 'GetFocus')
                        If Not @error Then $hc = $aRt[0]
                        If $hc = GUICtrlGetHandle($User) Then GUICtrlSetState($Password, $GUI_FOCUS)
                        If $hc = GUICtrlGetHandle($Password) Then GUICtrlSetState($Button1, $GUI_FOCUS)
                EndIf
        EndIf
EndFunc   ;==>_WM_COMMAND


在这个代码里鼠标点击不自动切换。
发表于 2018-8-25 17:43:55 | 显示全部楼层
Combo 是由 ComboBox 和 Edit 组成的组合控件,代码中 GetFocus 获取的是 Edit 控件,要想匹配的话需获取 Edit 与 Combo 的对应关系
发表于 2018-8-25 17:48:06 | 显示全部楼层
king8462 发表于 2018-8-25 14:30
在这个代码里鼠标点击不自动切换。

29 行 下面 多一行 GUICtrlSetState($Password, $GUI_FOCUS) 就可以了
发表于 2018-8-25 18:01:46 | 显示全部楼层
借一下 afan 老大的代碼
#include <GUIConstants.au3>

Global $ik
GUICreate('', 280, 100)
$A1=GUICtrlCreateCombo('Combo1', 20, 20, 200, 30)
GUICtrlSetData(-1, 'Combo2|Combo3|Combo4|Combo5')
$A2=GUICtrlCreateInput('Combo2', 20, 50, 200, 30)
;GUICtrlSetData(-1, 'Combo2|Combo3|Combo4|Combo5')
GUISetState()
$ik = GUICtrlCreateDummy()
Local $ak[1][2] = [['{Enter}', $ik]]
GUISetAccelerators($ak)
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $ik
                                           IF ControlGetFocus('') = 'Edit1' Then GUICtrlSetState($A2, $GUI_FOCUS)
        EndSwitch
WEnd

评分

参与人数 1金钱 +10 收起 理由
king8462 + 10 赞一个!

查看全部评分

 楼主| 发表于 2018-8-26 10:54:12 | 显示全部楼层
kk_lee69 发表于 2018-8-25 18:01
借一下 afan 老大的代碼

谢谢楼上大大!
再请教一下,如果要在$a2控件上输入内容后按回车键向下一个控件切换要怎么写,是不是再建一个GUICtrlCreateDummy()?
 楼主| 发表于 2018-8-26 11:07:09 | 显示全部楼层
afan 发表于 2018-8-25 17:43
Combo 是由 ComboBox 和 Edit 组成的组合控件,代码中 GetFocus 获取的是 Edit 控件,要想匹配的话需获取 E ...

A版能在3楼的代码中给点提示吗,谢谢了。
发表于 2018-8-27 13:25:44 | 显示全部楼层
king8462 发表于 2018-8-26 10:54
谢谢楼上大大!
再请教一下,如果要在$a2控件上输入内容后按回车键向下一个控件切换要怎么写,是不是再 ...

不用吧

case $A2
   判斷就好啊
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-24 00:36 , Processed in 0.080709 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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