找回密码
 加入
搜索
查看: 1286|回复: 4

[网络通信] [已解决]input输入框怎接受回车的两种方法,均有缺陷未解决。

[复制链接]
发表于 2021-10-6 17:52:15 | 显示全部楼层 |阅读模式
本帖最后由 smooth 于 2021-10-6 21:32 编辑

input输入框接受回车,一种是注册快捷键:

Local $Form1_AccelTable[1][2] = [["{ENTER}", $Input]]
GUISetAccelerators($Form1_AccelTable)
GUICtrlSetOnEvent($Input, '_abc')

这种方法有个问题,就是首次按下回车键,会执行两次。

另一种方法据说是回调,代码如下:

#include <WinAPIEx.au3>
Global $hInput1_CallBack = DllCallbackRegister("_Input_CallBackFunc", "int", "hWnd;uint;wparam;lparam")
Global $pInput1_CallBack = DllCallbackGetPtr($hInput1_CallBack)
Global $hOInput1_CallBack = _WinAPI_SetWindowLong(GUICtrlGetHandle($Input), $GWL_WNDPROC, $pInput1_CallBack)
GUICtrlSetOnEvent($Input, '_abc')

这种方法的缺陷是,如果输入框为空,按回车则没有反应,或者输入框的内容如果没有发生变化,再次按下回车键,也没有响应。
发表于 2021-10-6 18:26:19 | 显示全部楼层
随便用个虚拟控件执行
Local $hGui = GUICreate('')
Local $iInput = GUICtrlCreateInput('', 10, 10, 200, 20)
GUISetState()
Local $iDummy = GUICtrlCreateDummy()
Local $aAccelKeys[1][2] = [['{ENTER}', $iDummy]]
GUISetAccelerators($aAccelKeys)

While 1
        Switch GUIGetMsg()
                Case -3
                        Exit
                Case $iDummy
                        MsgBox(0, '', GUICtrlRead($iInput))
        EndSwitch
WEnd
 楼主| 发表于 2021-10-6 20:18:55 | 显示全部楼层
本帖最后由 smooth 于 2021-10-6 20:33 编辑
afan 发表于 2021-10-6 18:26
随便用个虚拟控件执行

这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来,是输入框接受了回车键,不失为一种过渡的解决办法。谢谢A大!
发表于 2021-10-6 20:55:02 | 显示全部楼层
smooth 发表于 2021-10-6 20:18
这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来, ...

你这个帖子可以改成【已解决】了,
发表于 2021-10-6 21:18:13 | 显示全部楼层
诶?这个思路好,,,谢谢A版大大
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-8 23:34 , Processed in 0.076151 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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