为何 _GUICtrlComboBox_GetEditText 读取到的数据 都是前一次的选定数据??[已解決]
本帖最后由 kk_lee69 于 2020-8-19 22:23 编辑为何_GUICtrlComboBox_GetEditText 读取到的数据 都是前一次的选定数据??
如何 才能读取到 目前所选的资料呢??
#include <GUIComboBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiEdit.au3>
$Debug_CB = False ; 檢查傳遞到 ComboBox / ComboBoxEx 函數的控制項類名, 設置為 True, 並使用一個控制碼到另一個控制項, 查看它的工作
Global $hCombo
_Main()
Func _Main()
Local $hGUI
; 創建 GUI
$hGUI = GUICreate("創建 ComboBox 控制項", 400, 296)
$hCombo = _GUICtrlComboBox_Create($hGUI, "", 2, 2, 396, 296)
GUISetState()
; 添加文件
_GUICtrlComboBox_BeginUpdate($hCombo)
_GUICtrlComboBox_AddDir($hCombo, "", $DDL_DRIVES, False)
_GUICtrlComboBox_EndUpdate($hCombo)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
; 迴圈到用戶退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; 低位字
$iCode = BitShift($iwParam, 16) ; 高位字
Switch $hWndFrom
Case $hCombo
Switch $iCode
Case $CBN_SELCHANGE ; 發送使用者修改下拉式列示方塊的清單方塊的當前選擇消息
_DebugPrint("$CBN_SELCHANGE" & @LF & "--> 控制項控制碼:" & @TAB & $hWndFrom & @LF & _
"--> 控制項 ID:" & @TAB & $iIDFrom & @LF & _
"--> 操作代碼:" & @TAB & $iCode)
; 沒有返回值
ConsoleWrite("A......................."&_GUICtrlComboBox_GetEditText($hCombo)&@CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"--> 行(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
试试这样
#include <GUIComboBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiEdit.au3>;
$Debug_CB = False ; 檢查傳遞到 ComboBox / ComboBoxEx 函數的控制項類名, 設置為 True, 並使用一個控制碼到另一個控制項, 查看它的工作
Global $hCombo
_Main()
Func _Main()
Local $hGUI
; 創建 GUI
$hGUI = GUICreate("創建 ComboBox 控制項", 400, 296)
$hCombo = _GUICtrlComboBox_Create($hGUI, "", 2, 2, 396, 296)
GUISetState()
; 添加文件
_GUICtrlComboBox_BeginUpdate($hCombo)
_GUICtrlComboBox_AddDir($hCombo, "", $DDL_DRIVES, False)
_GUICtrlComboBox_EndUpdate($hCombo)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
; 迴圈到用戶退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode ,$sText
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; 低位字
$iCode = BitShift($iwParam, 16) ; 高位字
Switch $hWndFrom
Case $hCombo
Switch $iCode
Case $CBN_SELCHANGE ; 發送使用者修改下拉式列示方塊的清單方塊的當前選擇消息
_DebugPrint("$CBN_SELCHANGE" & @LF & "--> 控制項控制碼:" & @TAB & $hWndFrom & @LF & _
"--> 控制項 ID:" & @TAB & $iIDFrom & @LF & _
"--> 操作代碼:" & @TAB & $iCode)
; 沒有返回值
_GUICtrlComboBox_GetLBText($hCombo, _GUICtrlComboBox_GetCurSel($hCombo), $sText)
;~ ConsoleWrite("A......................." & _GUICtrlComboBox_GetEditText($hCombo) & @CRLF)
ConsoleWrite("A......................." & $sText & @CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"--> 行(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
解法2:参考 P 大的 帖子:
https://www.autoitx.com/thread-15925-1-1.html 借着 P大的帖子,水多10个金币……………………
#include <GUIComboBox.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiEdit.au3>;
$Debug_CB = False ; 檢查傳遞到 ComboBox / ComboBoxEx 函數的控制項類名, 設置為 True, 並使用一個控制碼到另一個控制項, 查看它的工作
Global $hCombo
_Main()
Func _Main()
Local $hGUI
; 創建 GUI
$hGUI = GUICreate("創建 ComboBox 控制項", 400, 296)
$hCombo = _GUICtrlComboBox_Create($hGUI, "", 2, 2, 396, 296)
GUISetState()
; 添加文件
_GUICtrlComboBox_BeginUpdate($hCombo)
_GUICtrlComboBox_AddDir($hCombo, "", $DDL_DRIVES, False)
_GUICtrlComboBox_EndUpdate($hCombo)
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
; 迴圈到用戶退出
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
#forceref $hWnd, $iMsg
Local $hWndFrom, $iIDFrom, $iCode
$hWndFrom = $ilParam
$iIDFrom = BitAND($iwParam, 0xFFFF) ; 低位字
$iCode = BitShift($iwParam, 16) ; 高位字
Switch $hWndFrom
Case $hCombo
Switch $iCode
Case $CBN_SELENDOK;$CBN_SELCHANGE ; 發送使用者修改下拉式列示方塊的清單方塊的當前選擇消息
_DebugPrint("$CBN_SELCHANGE" & @LF & "--> 控制項控制碼:" & @TAB & $hWndFrom & @LF & _
"--> 控制項 ID:" & @TAB & $iIDFrom & @LF & _
"--> 操作代碼:" & @TAB & $iCode)
; 沒有返回值
Local $sText,$iCurSel
$iCurSel = _GUICtrlComboBox_GetCurSel($hCombo)
_GUICtrlComboBox_GetLBText($hCombo, $iCurSel, $sText)
ConsoleWrite("A......................."& $sText&@CRLF)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Func _DebugPrint($s_text, $line = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @LF & _
"+======================================================" & @LF & _
"--> 行(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
"+======================================================" & @LF)
EndFunc ;==>_DebugPrint
本帖最后由 floor6ggg 于 2020-8-19 20:06 编辑
没细看,和2楼 zghwelcome 大 的 撞车了,尴尬……
仔细比对了一下,还是有点区别:
Case $CBN_SELCHANGE 与 Case $CBN_SELENDOK的区别,当然,效果是一样的
页:
[1]