[已解决]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')
这种方法的缺陷是,如果输入框为空,按回车则没有反应,或者输入框的内容如果没有发生变化,再次按下回车键,也没有响应。
随便用个虚拟控件执行
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:33 编辑
afan 发表于 2021-10-6 18:26
随便用个虚拟控件执行
这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来,是输入框接受了回车键,不失为一种过渡的解决办法。谢谢A大! smooth 发表于 2021-10-6 20:18
这个办法的解决思路是,按下回车键,实际上是执行虚拟控件对应的事件,与输入框并无关系,表面上看起来, ...
你这个帖子可以改成【已解决】了,:face (15): 诶?这个思路好,,,谢谢A版大大
页:
[1]