Что нового

[Элементы GUI] Зависимость отображаемых значений в $Combo

prokazzza

Новичок
Сообщения
160
Репутация
2
Привет!
Подскажите, как реализовать зависимость отображаемых значений в $Combo3 от выбора значений в $Combo2. К примеру, чтобы при выборе $NameSerr1 подставлялись значения колонки $NameSerrc11, при выборе $NameSerr3 подставлялись значения колонки $NameSerrc31 и т.д.

Код:
#NoTrayIcon 
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

GUICreate("", 412, 576) ;Гуи
GUISetState(@SW_SHOW)

$NameSerr1 = "1"
$NameSerr2 = "2"
$NameSerr3 = "3"
$NameSerr4 = "4"
$NameSerr5 = "5"

$e=''
For $i = 1 to 5
    $e&=Eval('NameSerr' & $i)&'|'
Next
$e=StringTrimRight($e, 1)
$Combo2 = GUICtrlCreateCombo("", 16, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $e, $NameSerr1)

;[$NameSerr1]=========================

$NameSerrc11 = "a"
$NameSerrc12 = "b"
$NameSerrc13 = "c"

;[$NameSerr2]=========================

$NameSerrc21 = "A"
$NameSerrc22 = "B"
$NameSerrc23 = "C"
$NameSerrc24 = "D"
$NameSerrc25 = "E"

;[$NameSerr3]=========================

$NameSerrc31 = "Aa"
$NameSerrc32 = "Bb"
$NameSerrc33 = "Cc"
$NameSerrc34 = "Dd"

;[$NameSerr4]=========================

$NameSerrc41 = "Aa"

;[$NameSerr5]=========================

$NameSerrc51 = "Aaa"
$NameSerrc52 = "Bbb"

$e=''
For $i = 11 to 13
    $e&=Eval('NameSerrc' & $i)&'|'
Next
$e=StringTrimRight($e, 1)
$Combo3 = GUICtrlCreateCombo("", 219, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $e, $NameSerrc11)

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

xaker

Знающий
Сообщения
52
Репутация
16
Код:
#Include <GuiComboBox.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>

Global $aCombo1[5] = [1, 2, 3, 4, 5]
Global $aCombo2[5] = ["a|b|c", "A|B|C", "A|A|A", "B|B|B", "C|C|C"]

GUICreate("", 412, 576) ;Гуи
$Combo1 = GUICtrlCreateCombo("", 16, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, _ArrayToString($aCombo1), $aCombo1[0])
$Combo2 = GUICtrlCreateCombo("", 219, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
_SetCombo2()
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Combo1
			_SetCombo2()
    EndSwitch
WEnd

Func _SetCombo2()
	GUICtrlSetData($Combo2, "", "")
	GUICtrlSetData($Combo2, $aCombo2[_ArraySearch($aCombo1, GUICtrlRead($Combo1))])
	_GUICtrlComboBox_SetCurSel($Combo2, 0)
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
xaker,
а я пошел в обратную сторону. ;D
Код:
#NoTrayIcon
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <Array.au3>

GUICreate("", 412, 576) ;Гуи
GUISetState(@SW_SHOW)

$strNameSerr = "a|b|c|d|e"
$aNameSerr = StringSplit($strNameSerr,"|",2)

$Combo2 = GUICtrlCreateCombo("", 16, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $strNameSerr, $aNameSerr[0])

Dim $NameSerrc[5] = ["a|b|c","A|B|C|D|E","Aa|Bb|Cc|Dd","Aa","Aaa|Bbb"]
$aNameSerrc = StringSplit($NameSerrc[0],"|",2)

$Combo3 = GUICtrlCreateCombo("", 219, 238, 179, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $NameSerrc[0], $aNameSerrc[0])

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
		Case $Combo2
			$tmp = GUICtrlRead($Combo2)
			$index = _ArraySearch($aNameSerr, $tmp)
			$aNameSerrc = StringSplit($NameSerrc[$index],"|",2)
			GUICtrlSetData($Combo3, "|"&$NameSerrc[$index], $aNameSerrc[0])
	EndSwitch
WEnd
 

xaker

Знающий
Сообщения
52
Репутация
16
C2H5OH
если в первом комбо будут не цифры то работать не будет
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
prokazzza
http://autoit-script.ru/index.php/topic,10245.0.html
http://autoit-script.ru/index.php/topic,12305.0.html
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
xaker, C2H5OH

Спасибо, но при добавление значений типо $NameSerrc11 вместо "a|b|c", выбивает ошибку.
 

xaker

Знающий
Сообщения
52
Репутация
16
prokazzza
покажи пример где выбивает ошибку
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
xaker,
ну да, ну. Переделал. Отвязался от цифр в первом комбо.

prokazzza,
покажи что в консоли пишет, когда ошибка возникает
(я так думаю, что скорее всего ты добавляешь значения в первый комбо, а втрой оставляешь как есть)
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Разобрался уже :smile: Надо было вносить значения так:

Код:
Global $aCombo2[5] = [$NameSerrc11&'|'&$NameSerrc12, $NameSerrc22&'|'&$NameSerrc23, "A|A|A", "B|B|B", "C|C|C"]
 
Верх