kk_lee69 发表于 2020-8-19 19:07:03

为何 _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



zghwelcome 发表于 2020-8-19 19:31:06

试试这样


#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


floor6ggg 发表于 2020-8-19 19:53:16

解法2:参考 P 大的 帖子:

https://www.autoitx.com/thread-15925-1-1.html

floor6ggg 发表于 2020-8-19 19:55:33

借着 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:02:06

本帖最后由 floor6ggg 于 2020-8-19 20:06 编辑

没细看,和2楼 zghwelcome 大   的 撞车了,尴尬……
仔细比对了一下,还是有点区别:

Case $CBN_SELCHANGE   与 Case $CBN_SELENDOK的区别,当然,效果是一样的
页: [1]
查看完整版本: 为何 _GUICtrlComboBox_GetEditText 读取到的数据 都是前一次的选定数据??[已解決]