本帖最后由 fenhanxue 于 2017-7-25 22:53 编辑
先上代码:#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiComboBox.au3>
#include <GuiComboBoxEx.au3>
$Form1 = GUICreate("Form1", 623, 449)
$Combo1 = GUICtrlCreateCombo("", 88, 72, 329, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$bt = GUICtrlCreateButton('',0,300,100,100)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $bt
MsgBox(0,'',GUICtrlRead($Combo1))
EndSwitch
WEnd
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam);文本变化
Local $temp_list[5] = [4,'7.4*35.5*600','8.4*35.5*600','22','33']
Local $hWndFrom, $iIDFrom, $iCode, $hWndCombo
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF)
$iCode = BitShift($iwParam, 16)
;判断是否是 $Combo1 消息
If $hWndFrom <> GUICtrlGetHandle($Combo1) Then Return $GUI_RUNDEFMSG
If $iCode <> $CBN_EDITCHANGE Then Return $GUI_RUNDEFMSG;$CBN_EDITCHANGE 代表 $Combo1 文字发生改变
$temp_hwnd = $Combo1
Local $last = GUICtrlRead($temp_hwnd)
Do
Until _GUICtrlComboBox_DeleteString($temp_hwnd, 0) = -1
If $last = '' Then
For $i = 1 To $temp_list[0]
_GUICtrlComboBox_AddString($temp_hwnd, $temp_list[$i])
Next
_GUICtrlComboBox_ShowDropDown($temp_hwnd, False)
Else
Local $if_have_item = 0
For $i = 1 To $temp_list[0]
Local $temp_data = ''
If StringInStr($temp_list[$i], $last) <> 0 Then
_GUICtrlComboBox_AddString($temp_hwnd,$temp_list[$i])
$if_have_item = 1
EndIf
Next
If $if_have_item = 1 Then
Sleep(1)
_GUICtrlComboBox_ShowDropDown($temp_hwnd, True)
_GUICtrlComboBox_SetEditText($temp_hwnd,$last)
Else
If _GUICtrlComboBox_GetDroppedState($temp_hwnd) Then _GUICtrlComboBox_ShowDropDown($temp_hwnd, False)
EndIf
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
异常表现如下图:
1.启动程序后,鼠标点击combo输入框
2.键盘输入4*
3.鼠标点一下任何灰色的GUI界面(目的是让combo取消下拉)
4.点一下按钮。此时 GUICtrlRead($Combo) 得到的结果不是 4* ,而是下拉框里的第一行文本,何解?
5:另,根据多次测试,发现,键盘一次只输入一个字符的话,GUICtrlRead($Combo) 得到的结果是正确的。一次性输入多个字符,则得到的结果就不正确。
如,一次性只输入4,那么 GUICtrlRead($Combo) 的结果也会是4
一次性输入 35 GUICtrlRead($Combo) 的结果便不是35,而是Combo 下拉后的第一行文本 |