king8462 发表于 2018-8-25 12:59:28

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

本帖最后由 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

afan 发表于 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

chzj589 发表于 2018-8-25 13:57:07

我运行正常,不清楚你问的是什么?

king8462 发表于 2018-8-25 14:05:12

chzj589 发表于 2018-8-25 13:57
我运行正常,不清楚你问的是什么?

抱歉,我没说清楚,是按回车无法切换到下一个控件,不是无法运行代码。

chzj589 发表于 2018-8-25 14:12:06

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

你点击$User = GUICtrlCreateCombo就跳到$Password = GUICtrlCreateInput
还需要?

king8462 发表于 2018-8-25 14:17:24

chzj589 发表于 2018-8-25 14:12
你点击$User = GUICtrlCreateCombo就跳到$Password = GUICtrlCreateInput
还需要?

没明白意思

chzj589 发表于 2018-8-25 14:22:17

king8462 发表于 2018-8-25 14:17
没明白意思





king8462 发表于 2018-8-25 14:24:34

chzj589 发表于 2018-8-25 14:22

哦,明白了!能不能实现手动输入一些内容,然后回车切换下一个控件。有些内容combo下拉列表没有,需要手动输入。

king8462 发表于 2018-8-25 14:30:28

chzj589 发表于 2018-8-25 14:22


#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
                        If $hc = GUICtrlGetHandle($User) Then GUICtrlSetState($Password, $GUI_FOCUS)
                        If $hc = GUICtrlGetHandle($Password) Then GUICtrlSetState($Button1, $GUI_FOCUS)
                EndIf
      EndIf
EndFunc   ;==>_WM_COMMAND


在这个代码里鼠标点击不自动切换。

afan 发表于 2018-8-25 17:43:55

Combo 是由 ComboBox 和 Edit 组成的组合控件,代码中 GetFocus 获取的是 Edit 控件,要想匹配的话需获取 Edit 与 Combo 的对应关系

kk_lee69 发表于 2018-8-25 17:48:06

king8462 发表于 2018-8-25 14:30
在这个代码里鼠标点击不自动切换。

29 行 下面 多一行 GUICtrlSetState($Password, $GUI_FOCUS) 就可以了

kk_lee69 发表于 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 = [['{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

king8462 发表于 2018-8-26 10:54:12

kk_lee69 发表于 2018-8-25 18:01
借一下 afan 老大的代碼

谢谢楼上大大!
再请教一下,如果要在$a2控件上输入内容后按回车键向下一个控件切换要怎么写,是不是再建一个GUICtrlCreateDummy()?

king8462 发表于 2018-8-26 11:07:09

afan 发表于 2018-8-25 17:43
Combo 是由 ComboBox 和 Edit 组成的组合控件,代码中 GetFocus 获取的是 Edit 控件,要想匹配的话需获取 E ...

A版能在3楼的代码中给点提示吗,谢谢了。

kk_lee69 发表于 2018-8-27 13:25:44

king8462 发表于 2018-8-26 10:54
谢谢楼上大大!
再请教一下,如果要在$a2控件上输入内容后按回车键向下一个控件切换要怎么写,是不是再 ...

不用吧

case $A2
   判斷就好啊
页: [1]
查看完整版本: [已解决]关于回车键切换combo控件焦点的问题