Что нового

Значения Combo из двумерного массива

joparezzz

Новичок
Сообщения
65
Репутация
0
Есть двумерный массив $aArray, как заполнить значения Combo элементами массива?
Причем в Combo1 и Combo3 значения из первого столбца (т.е. название шкафов), а в Combo2 и Combo4 значения строк (т.е. габаритные размеры шкафов) в соответствии с выбранным значением Combo1 и Combo3.
Код:
#include <Array.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 615, 437, 192, 124)
$Combo1 = GUICtrlCreateCombo("Combo1", 56, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo2 = GUICtrlCreateCombo("Combo2", 248, 56, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo3 = GUICtrlCreateCombo("Combo3", 56, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$Combo4 = GUICtrlCreateCombo("Combo4", 248, 156, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))

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", 		"", 				""	]]

_ArrayDisplay($aArray)

ConsoleWrite(Ubound($aArray, 1) & @CRLF)
For $i = 0 To Ubound($aArray, 1) - 1
	ConsoleWrite($aArray[$i][0] & @CRLF)
	For $j = 1 To Ubound($aArray, 2) - 1
		If $aArray[$i][$j] <> "" Then
			ConsoleWrite(@TAB & $aArray[$i][$j] & @CRLF)
		Else
		EndIf
	Next
Next


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
 
Автор
J

joparezzz

Новичок
Сообщения
65
Репутация
0
Откорректировал код, вроде работает, только как убрать пустые элементы массива в Combo2 и Combo4?
Код:
#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))

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
				_GUICtrlComboBox_AddString($Combo2, $aArray[$Index][$j])
            Next
			_GUICtrlComboBox_SetCurSel($Combo2, 0)

		Case $Combo3
			_GUICtrlComboBox_ResetContent($Combo4)
            $Index = _GUICtrlComboBox_GetCurSel($Combo3)
            For $j = 1 To Ubound($aArray, 2) - 1
				_GUICtrlComboBox_AddString($Combo4, $aArray[$Index][$j])
            Next
			_GUICtrlComboBox_SetCurSel($Combo4, 0)

	EndSwitch
WEnd



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

Добавил прерывание цикла, насколько это правильное решение в данном случае?
Код:
For $j = 1 To Ubound($aArray, 2) - 1
	If $aArray[$Index][$j] = "" Then ExitLoop
	_GUICtrlComboBox_AddString($Combo2, $aArray[$Index][$j])
Next
 
Верх