Автор Тема: Значения Combo из двумерного массива  (Прочитано 240 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн joparezzz [?]

  • Новичок
  • *
  • Сообщений: 62
  • Репутация: 0
  • Пол: Мужской
    • Награды
Есть двумерный массив $aArray, как заполнить значения Combo элементами массива?
Причем в Combo1 и Combo3 значения из первого столбца (т.е. название шкафов), а в Combo2 и Combo4 значения строк (т.е. габаритные размеры шкафов) в соответствии с выбранным значением  Combo1 и Combo3.
Код: AutoIt [Выделить]
#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

 


Русское сообщество AutoIt

Значения Combo из двумерного массива
« Отправлен: Апрель 04, 2018, 12:14:20 »

Оффлайн joparezzz [?]

  • Новичок
  • *
  • Сообщений: 62

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Значения Combo из двумерного массива
« Ответ #1, Отправлен: Апрель 04, 2018, 14:22:56 »
Откорректировал код, вроде работает, только как убрать пустые элементы массива в Combo2 и Combo4?
Код: AutoIt [Выделить]
#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

 



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

« Последнее редактирование: Апрель 04, 2018, 14:33:37 от joparezzz, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Значения Combo из двумерного массива
« Ответ #1 Отправлен: Апрель 04, 2018, 14:22:56 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
4013 Просмотров
Последний ответ Январь 19, 2010, 11:00:17
от Suppir
15 Ответов
7792 Просмотров
Последний ответ Декабрь 25, 2011, 06:11:13
от Yashied
6 Ответов
4925 Просмотров
Последний ответ Июнь 05, 2012, 15:38:32
от general66
6 Ответов
3485 Просмотров
Последний ответ Январь 09, 2013, 17:24:45
от ---Zak---
2 Ответов
1582 Просмотров
Последний ответ Февраль 11, 2014, 08:49:21
от Tiberium6
2 Ответов
1206 Просмотров
Последний ответ Июнь 18, 2015, 14:12:59
от pvnn
1 Ответов
867 Просмотров
Последний ответ Август 03, 2015, 22:31:15
от Vovsla
8 Ответов
2422 Просмотров
Последний ответ Январь 30, 2016, 14:11:26
от firex
14 Ответов
2546 Просмотров
Последний ответ Октябрь 01, 2016, 17:29:20
от sem0709
10 Ответов
943 Просмотров
Последний ответ Август 11, 2017, 09:42:03
от Nbv_tim