输入框响应输入问题【已解决】
本帖最后由 duxing 于 2020-4-20 08:54 编辑Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo,$hWndCombo1
If Not IsHWnd($Input24) Then $hWndCombo = GUICtrlGetHandle($Input24)
;If Not IsHWnd($Input25) Then $hWndCombo1 = GUICtrlGetHandle($Input25)
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF)
$iCode = BitShift($iwParam, 16)
Switch $hWndFrom
Case $Input24, $hWndCombo
Switch $iCode
Case $CBN_EDITUPDATE
Local $sQueryText = ''
Local $sCondition, $hQuery, $aRow
$sColumn_Name = GUICtrlRead($Combo12)
if $sColumn_Name ="编码" then $sColumn_Name ="column1"
if $sColumn_Name ="描述" then $sColumn_Name ="column2"
if $sColumn_Name ="简称" then $sColumn_Name ="column3"
if $sColumn_Name ="分类" then $sColumn_Name ="column4"
$sCondition = $sColumn_Name & ' LIKE "%' & _GUICtrlComboBox_GetEditText ( $Input24) & '%"'
GUICtrlSendMsg($ListView1, 4105, 0, 0)
_SQLite_Open($sSQLite_DB_Path)
_SQLite_Query(-1, 'SELECT * FROM TestTable WHERE ' & $sCondition, $hQuery)
;GUICtrlCreateListViewItem($sQueryText, $ListView1)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
$sQueryText = $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow
GUICtrlCreateListViewItem($sQueryText, $ListView1)
WEnd
_SQLite_Close()
EndSwitch
输入框输入字符,自动SQLITE查询列出,不知道会不会因为过快经常会列出很多无用结果,可有人遇到过?
floor6ggg 发表于 2020-4-18 15:49
无法进行调试,猜测。。。。。。。。。。。。
1.在上面贴出的代码的20行,对21行用到的_GUICtrlComboBox ...
01.consolewrite(_GUICtrlComboBox_GetEditText ( $Input24) & @CRLF) 这个测试过,是我需要的数值,而且查询结果前面部分也是无误的。
我觉得可能问题是出在SQLITE查询状态没结束,又重复打开再查询 本帖最后由 floor6ggg 于 2020-4-18 15:52 编辑
无法进行调试,猜测。。。。。。。。。。。。
1.在上面贴出的代码的20行,对21行用到的_GUICtrlComboBox_GetEditText ( $Input24)这一个指标consolewrite,然后自己进行监测,看看每一次取得的数值是不是自己需要的:consolewrite(_GUICtrlComboBox_GetEditText ( $Input24) & @CRLF)
2.实在不行的话,对21行用到的_GUICtrlComboBox_GetEditText ( $Input24)进行限定和判断,只有当stringlen(_GUICtrlComboBox_GetEditText ( $Input24))>2的时候才触发下一步动作:if stringlen(_GUICtrlComboBox_GetEditText ( $Input24))>2 then
。。。。。。。。。。。。。。。。。。根据自己的需要调整字符长度……………… 数据库查询这块不熟,坐等高人出手。。。。
没得调试,只能凭感觉。。。个人感觉,试一下第23行的注销一下看看。。。?我能想到的最后一个怀疑对象。。。。 我要是在$Input24 中输入字符慢慢打,结果就是正常的,一打快就不行,咋样才能限制下增加个查询延迟? 输入框是input控件而不是combo控件?试试:
第11行的: Case $CBN_EDITUPDATE更改为Case $EN_CHANGE
还不行的话,真得撤了^^^^^^^ 本帖最后由 chzj589 于 2020-4-19 10:08 编辑
duxing 发表于 2020-4-18 16:49
我要是在$Input24 中输入字符慢慢打,结果就是正常的,一打快就不行,咋样才能限制下增加个查询延迟?
这样试试看
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
$a = GUIGetCursorInfo($WinMainSub2)
Switch $iIDFrom
Case $Input24
If $a = 0 Then
_XRichEditxaD()
;Else
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _XRichEditxaD();搜索信息查询
Local $sQueryText = ''
Local $sCondition, $hQuery, $aRow
$sColumn_Name = GUICtrlRead($Combo12)
If $sColumn_Name = "编码" Then $sColumn_Name = "column1"
If $sColumn_Name = "描述" Then $sColumn_Name = "column2"
If $sColumn_Name = "简称" Then $sColumn_Name = "column3"
If $sColumn_Name = "分类" Then $sColumn_Name = "column4"
$sCondition = $sColumn_Name & ' LIKE "%' & _GUICtrlComboBox_GetEditText($Input24) & '%"'
GUICtrlSendMsg($ListView1, 4105, 0, 0)
_SQLite_Open($sSQLite_DB_Path)
_SQLite_Query(-1, 'SELECT * FROM TestTable WHERE ' & $sCondition, $hQuery)
;GUICtrlCreateListViewItem($sQueryText, $ListView1)
While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
$sQueryText = $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow & '|' & $aRow
GUICtrlCreateListViewItem($sQueryText, $ListView1)
WEnd
_SQLite_Close()
EndFunc ;==>_XRichEditxaD
floor6ggg 发表于 2020-4-18 21:22
输入框是input控件而不是combo控件?试试:
第11行的: Case $CBN_EDITUPDATE更改为
是combo控件
不能替换,替换就没响应了 本帖最后由 duxing 于 2020-4-20 09:03 编辑
chzj589 发表于 2020-4-19 10:00
这样试试看
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
已解决,就是还没搞懂原理,$a = GUIGetCursorInfo($hGui1)?实际作用是不是就是加个延迟?Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo,$hWndCombo1
If Not IsHWnd($Input24) Then $hWndCombo = GUICtrlGetHandle($Input24)
;If Not IsHWnd($Input25) Then $hWndCombo1 = GUICtrlGetHandle($Input25)
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF)
$iCode = BitShift($iwParam, 16)
$a = GUIGetCursorInfo($hGui1)
Switch $hWndFrom
Case $Input24, $hWndCombo
If $a = 0 Then _XRichEditxaD()
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
页:
[1]