Что нового

Заполнение Edit в зависимости от выбранного Combo

joparezzz

Новичок
Сообщения
65
Репутация
0
На данный момент заполняется поле Edit в зависимости от выбранного Combo.
как сделать чтоб в поле Edit попадали значения от всех элементов Combo?
Код:
#include <Array.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <EditConstants.au3>
#Include <GUIComboBox.au3>

$Form1 = GUICreate("Form1", 615, 437, 192, 124)
$Combo1 = GUICtrlCreateCombo("", 56, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo2 = GUICtrlCreateCombo("", 248, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo3 = GUICtrlCreateCombo("", 56, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo4 = GUICtrlCreateCombo("", 248, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Edit1 = GUICtrlCreateEdit("", 40, 280, 537, 137)
GUISetState(@SW_SHOW)

Local $aArray[][] = 	[ _
						["Шкафа связи", 	"?x?x?",	"600x600x2100", 	"", 				""	], _
						["ШТМ",				"?x?x?", 	"800x600x2000", 	"1000x600x2000", 	""	], _
						["Шкаф ЗИП",		"?x?x?", 	"600х450х700", 		"600х600х800", 		""	], _
						["ШОС",				"?x?x?", 	"600x600x2000", 	"600x600x2160", 	""	], _
						["ШУМПС", 			"?x?x?", 	"600х250х800", 		"", 				""	]]

For $i = 0 To UBound($aArray, 1) - 1
    _GUICtrlComboBox_AddString($Combo1, $aArray[$i][0])
	_GUICtrlComboBox_AddString($Combo3, $aArray[$i][0])
Next


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Combo1
			_GUICtrlComboBox_ResetContent($Combo2)
            $Index = _GUICtrlComboBox_GetCurSel($Combo1)
            For $j = 1 To Ubound($aArray, 2) - 1
				If $aArray[$Index][$j] = "" Then ExitLoop
				_GUICtrlComboBox_AddString($Combo2, $aArray[$Index][$j])
            Next
			_GUICtrlComboBox_SetCurSel($Combo2, 0)
			GUICtrlSetData($Edit1, GUICtrlRead($Combo1) & ': ' & GUICtrlRead($Combo2) & ' мм (ШхГхВ);' & @CRLF)

		Case $Combo2
			GUICtrlSetData($Edit1, GUICtrlRead($Combo1) & ': ' & GUICtrlRead($Combo2) & ' мм (ШхГхВ);' & @CRLF)

		Case $Combo3
			_GUICtrlComboBox_ResetContent($Combo4)
            $Index = _GUICtrlComboBox_GetCurSel($Combo3)
            For $j = 1 To Ubound($aArray, 2) - 1
				If $aArray[$Index][$j] = "" Then ExitLoop
				_GUICtrlComboBox_AddString($Combo4, $aArray[$Index][$j])
            Next
			_GUICtrlComboBox_SetCurSel($Combo4, 0)
			GUICtrlSetData($Edit1, GUICtrlRead($Combo3) & ': ' & GUICtrlRead($Combo4) & ' мм (ШхГхВ);' & @CRLF)

		Case $Combo4
			GUICtrlSetData($Edit1, GUICtrlRead($Combo3) & ': ' & GUICtrlRead($Combo4) & ' мм (ШхГхВ);' & @CRLF)

	EndSwitch
WEnd
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>

Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100"], _
		["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
		["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
		["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
		["ШУМПС", "?x?x?", "600х250х800"]]
Global $aCombo[3][2] = [[2]], $iEdit1
GUICreate("", 615, 435, 190, 125)
_CreateCombo()
$iEdit1 = GUICtrlCreateEdit("", 40, 280, 535, 135)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aCombo[1][0]
			_UpdateCombo(1)
		Case $aCombo[2][0]
			_UpdateCombo(2)
		Case $aCombo[1][1], $aCombo[2][1]
			_UpdateEdit()
	EndSwitch
WEnd

Func _CreateCombo()
	$aCombo[1][0] = GUICtrlCreateCombo("", 55, 55, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
	$aCombo[1][1] = GUICtrlCreateCombo("", 250, 55, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
	$aCombo[2][0] = GUICtrlCreateCombo("", 55, 155, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
	$aCombo[2][1] = GUICtrlCreateCombo("", 250, 155, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
	For $i = 1 To $aCombo[0][0]
		For $j = 0 To UBound($aInfo) - 1
			GUICtrlSetData($aCombo[$i][0], $aInfo[$j][0])
		Next
	Next
EndFunc   ;==>_CreateCombo

Func _UpdateCombo($iIndex)
	Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex][0])
	GUICtrlSetData($aCombo[$iIndex][1], "")
	For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
		If $aInfo[$iSel][$i] Then GUICtrlSetData($aCombo[$iIndex][1], $aInfo[$iSel][$i])
	Next
	_GUICtrlComboBox_SetCurSel($aCombo[$iIndex][1], 0)
	_UpdateEdit()
EndFunc   ;==>_UpdateCombo

Func _UpdateEdit()
	Local $sTemp, $sRead
	For $i = 1 To $aCombo[0][0]
		$sTemp = GUICtrlRead($aCombo[$i][0])
		If $sTemp Then $sRead &= $sTemp & ': ' & GUICtrlRead($aCombo[$i][1]) & ' мм (ШхГхВ);' & @CRLF
	Next
	GUICtrlSetData($iEdit1, $sRead)
EndFunc   ;==>_UpdateEdit
 
Автор
J

joparezzz

Новичок
Сообщения
65
Репутация
0
Спасибо) прекрасно работает)))


Добавлено:
Сообщение автоматически объединено:

а можно ли $aCombo[1][1] и $aCombo[2][1] заменить на один List?
причем чтобы в List попадали только те значения с каким Combo в данный момент работаешь?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Код:
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>
#include <GUIListBox.au3>
#include <WinAPI.au3>

Global $aCombo[3] = [2], $aValues[3] = [2], $iFocusIndex, $iEdit, $iList
Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100"], _
		["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
		["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
		["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
		["ШУМПС", "?x?x?", "600х250х800"]]

GUICreate("", 330, 330)
$iList = GUICtrlCreateList("", 170, 10, 150, 150)
$iEdit = GUICtrlCreateEdit("", 10, 170, 310, 150)
_CreateCombo()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aCombo[1]
			_UpdateList(1)
		Case $aCombo[2]
			_UpdateList(2)
		Case $iList
			_UpdateEdit()
	EndSwitch
WEnd

Func _CreateCombo()
	Local $iY = 10
	For $i = 1 To $aCombo[0]
		$aCombo[$i] = GUICtrlCreateCombo("", 10, $iY, 150, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
		For $j = 0 To UBound($aInfo) - 1
			GUICtrlSetData($aCombo[$i], $aInfo[$j][0])
		Next
		$iY += 30
	Next
EndFunc   ;==>_CreateCombo

Func _UpdateList($iIndex)
	Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex])
	If $iSel >= 0 Then
		GUICtrlSetData($iList, "")
		For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
			If $aInfo[$iSel][$i] Then GUICtrlSetData($iList, $aInfo[$iSel][$i])
		Next
	EndIf
EndFunc   ;==>_UpdateList

Func _UpdateEdit()
	Local $sData
	If _GUICtrlListBox_GetCurSel($iList) >= 0 Then
		$aValues[$iFocusIndex] = GUICtrlRead($iList)
		For $i = 1 To $aCombo[0]
			If $aValues[$i] Then $sData &= GUICtrlRead($aCombo[$i]) & ": " & $aValues[$i] & " мм (ШхГхВ);" & @CRLF
		Next
		GUICtrlSetData($iEdit, $sData)
	EndIf
EndFunc   ;==>_UpdateEdit

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
	Switch _WinAPI_HiWord($wParam)
		Case $CBN_SETFOCUS
			Switch _WinAPI_LoWord($wParam)
				Case $aCombo[1]
					$iFocusIndex = 1
					_UpdateList(1)
				Case $aCombo[2]
					$iFocusIndex = 2
					_UpdateList(2)
			EndSwitch
	EndSwitch
EndFunc   ;==>WM_COMMAND
 
Автор
J

joparezzz

Новичок
Сообщения
65
Репутация
0
Крутяк))))


Добавлено:
Сообщение автоматически объединено:

Немного откорректировал, добавил еще пару Combo, а также в $aInfo добавил комментарии #, которые попадают в $iListC, а потом в Edit. Но например выбрал комментарий, а потом решил, что комментарий в Edit не нужно. Как реализовать очистку комментария? или лучше просто создать пустой комментарий в массиве $aInfo?
Код:
#include <AutoItConstants.au3>
#include <GUIConstants.au3>
#include <GUIComboBox.au3>
#include <GUIListBox.au3>
#include <WinAPI.au3>

Global $aCombo[6] = [5], $aValues[6] = [5], $aValuesC[6] = [5], $iFocusIndex, $iEdit, $iList, $iListC
Global $aInfo[][] = [["Шкафа связи", "?x?x?", "600x600x2100", "#Комментарий 1", "#Комментарий 2"], _
        ["ШТМ", "?x?x?", "800x600x2000", "1000x600x2000"], _
        ["Шкаф ЗИП", "?x?x?", "600х450х700", "600х600х800"], _
        ["ШОС", "?x?x?", "600x600x2000", "600x600x2160"], _
        ["ШУМПС", "?x?x?", "600х250х800"]]


#include <Array.au3>
#include <Excel.au3>
$SorceFile = @ScriptDir & "\База данных.xlsx"
Local $oExcel = _Excel_Open(False, True, False, True, True)
Local $oWorkbook = _Excel_BookOpen($oExcel, $SorceFile)
;Local $aInfo = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.Sheets(1).Usedrange.Columns("A:F"), 1)
_Excel_Close($oExcel, False, True)


GUICreate("", 330, 330)
$iList = GUICtrlCreateList("", 170, 10, 150, 150-78)
$iListC = GUICtrlCreateList("", 170, 90, 150, 150-78)
$iEdit = GUICtrlCreateEdit("", 10, 170, 310, 150)
_CreateCombo()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $aCombo[1]
            _UpdateList(1)
        Case $aCombo[2]
            _UpdateList(2)
		Case $aCombo[3]
            _UpdateList(3)
        Case $aCombo[4]
            _UpdateList(4)
		Case $aCombo[5]
            _UpdateList(5)
		Case $iList
            _UpdateEdit()
		Case $iListC
            _UpdateEdit()
    EndSwitch
WEnd

Func _CreateCombo()
    Local $iY = 10
    For $i = 1 To $aCombo[0]
        $aCombo[$i] = GUICtrlCreateCombo("", 10, $iY, 150, 20, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
        For $j = 0 To UBound($aInfo) - 1
            GUICtrlSetData($aCombo[$i], $aInfo[$j][0])
        Next
        $iY += 30
    Next
EndFunc   ;==>_CreateCombo

Func _UpdateList($iIndex)
    Local $iSel = _GUICtrlComboBox_GetCurSel($aCombo[$iIndex])
    If $iSel >= 0 Then
        GUICtrlSetData($iList, "")
		GUICtrlSetData($iListC, "")
        For $i = 1 To UBound($aInfo, $UBOUND_COLUMNS) - 1
            If $aInfo[$iSel][$i] And StringLeft($aInfo[$iSel][$i], 1) <> '#' Then GUICtrlSetData($iList, $aInfo[$iSel][$i])
			If StringLeft($aInfo[$iSel][$i], 1) = '#' Then GUICtrlSetData($iListC, StringTrimLeft($aInfo[$iSel][$i], 1))
        Next
    EndIf
EndFunc   ;==>_UpdateList

Func _UpdateEdit()
    Local $sData
    If _GUICtrlListBox_GetCurSel($iList) >= 0 Or _GUICtrlListBox_GetCurSel($iListC) >= 0 Then
        $aValues[$iFocusIndex] = GUICtrlRead($iList)
		$aValuesC[$iFocusIndex] = GUICtrlRead($iListC)
        For $i = 1 To $aCombo[0]
            If $aValues[$i] Or  $aValuesC[$i] Then $sData &= GUICtrlRead($aCombo[$i]) & ": " & $aValues[$i] & " мм (ШхГхВ);" & $aValuesC[$i] & @CRLF
        Next
        GUICtrlSetData($iEdit, $sData)
    EndIf
EndFunc   ;==>_UpdateEdit

Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch _WinAPI_HiWord($wParam)
        Case $CBN_SETFOCUS
            Switch _WinAPI_LoWord($wParam)
                Case $aCombo[1]
                    $iFocusIndex = 1
                    _UpdateList(1)
                Case $aCombo[2]
                    $iFocusIndex = 2
                    _UpdateList(2)
				Case $aCombo[3]
                    $iFocusIndex = 3
                    _UpdateList(3)
				Case $aCombo[4]
                    $iFocusIndex = 4
                    _UpdateList(4)
				Case $aCombo[5]
                    $iFocusIndex = 5
                    _UpdateList(5)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_COMMAND
 
Верх