smooth 发表于 2021-10-6 17:52:15

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

本帖最后由 smooth 于 2021-10-6 21:32 编辑

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

Local $Form1_AccelTable = [["{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')

这种方法的缺陷是,如果输入框为空,按回车则没有反应,或者输入框的内容如果没有发生变化,再次按下回车键,也没有响应。

afan 发表于 2021-10-6 18:26:19

随便用个虚拟控件执行
Local $hGui = GUICreate('')
Local $iInput = GUICtrlCreateInput('', 10, 10, 200, 20)
GUISetState()
Local $iDummy = GUICtrlCreateDummy()
Local $aAccelKeys = [['{ENTER}', $iDummy]]
GUISetAccelerators($aAccelKeys)

While 1
        Switch GUIGetMsg()
                Case -3
                        Exit
                Case $iDummy
                        MsgBox(0, '', GUICtrlRead($iInput))
        EndSwitch
WEnd

smooth 发表于 2021-10-6 20:18:55

本帖最后由 smooth 于 2021-10-6 20:33 编辑

afan 发表于 2021-10-6 18:26
随便用个虚拟控件执行
这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来,是输入框接受了回车键,不失为一种过渡的解决办法。谢谢A大!

smallan 发表于 2021-10-6 20:55:02

smooth 发表于 2021-10-6 20:18
这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来, ...

你这个帖子可以改成【已解决】了,:face (15):

yuantian 发表于 2021-10-6 21:18:13

诶?这个思路好,,,谢谢A版大大
页: [1]
查看完整版本: [已解决]input输入框怎接受回车的两种方法,均有缺陷未解决。