Что нового

Как изменить список в Combo_2 при смене значения в Combo_1

A

at

Гость
Здравствуйте ! Прошу подсказать или показать на примере. Как изменить список в Combo_2 при смене значения в Combo_1.

Я попытался сделать так, но не пойму, в чем ошибка.
Код:
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

Global $_Spisok_A = 'A|B|C'
Global $_Spisok_B = 'Z|X|W'
Global $_Spisok_C = 'K|L|M'
Global $_Spisok = ''
#Region ### START Koda GUI section ### Form=
$_Form = GUICreate('', 324, 123, 192, 114)
$_Combo_1 = GUICtrlCreateCombo('Список_А', 8, 24, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, 'Список_В|Список_С')
$_Combo_2 = GUICtrlCreateCombo('не выбрано', 168, 24, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, $_Spisok)
$Input1 = GUICtrlCreateInput('', 8, 72, 305, 21)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $_Combo_1
            Switch GUICtrlRead($_Combo_1)
				Case GUICtrlRead($_Combo_1) = 'Список_А'
					$_Spisok = $_Spisok_A
				Case GUICtrlRead($_Combo_1) = 'Список_B'
					$_Spisok = $_Spisok_B
				Case GUICtrlRead($_Combo_1) = 'Список_C'
					$_Spisok = $_Spisok_C
			EndSwitch
	EndSwitch
WEnd
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include <ComboConstants.au3>
Global $_Spisok_A = 'A|B|C'
Global $_Spisok_B = 'Z|X|W'
Global $_Spisok_C = 'K|L|M'
$_Form = GUICreate('', 324, 123, 192, 114)
$_Combo_1 = GUICtrlCreateCombo('Список_А', 8, 24, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, 'Список_В|Список_С')
$_Combo_2 = GUICtrlCreateCombo('', 168, 24, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))

$Input1 = GUICtrlCreateInput('', 8, 72, 305, 21)
GUISetState(@SW_SHOW)
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
		Case $_Combo_1
			Select
				Case GUICtrlRead($_Combo_1) = 'Список_А'
;~ 					MsgBox(0,'',1)
					GUICtrlSetData($_Combo_2, '')
					GUICtrlSetData($_Combo_2, $_Spisok_A)
				Case GUICtrlRead($_Combo_1) = 'Список_В'
;~ 				   MsgBox(0,'',2)
					GUICtrlSetData($_Combo_2, '')
					GUICtrlSetData($_Combo_2, $_Spisok_B)
				Case GUICtrlRead($_Combo_1) = 'Список_С'
;~ 					MsgBox(0,'',3)
					GUICtrlSetData($_Combo_2, '')
					GUICtrlSetData($_Combo_2, $_Spisok_C)
			EndSelect
	EndSwitch
WEnd
 
Автор
A

at

Гость
AZJIO, Спасибо за подсказку. Я видел эту тему и вот что у меня получилось. При выборе списка "С" отображается другой список. В чем проблема не пойму. И еще один момент, нужно чтобы в Combo_2 По умолчанию был Список "А":
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>

Global $_Spisok_A = 'A|B|C'
Global $_Spisok_B = 'Z|X|W'
Global $_Spisok_C = 'K|L|M'
$_Form = GUICreate("", 316, 203, 346, 262)
GUICtrlCreateGroup("", 8, 1, 297, 193)
$_Combo_1 = GUICtrlCreateCombo('Список_A', 16, 16, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Список_В|Список_С")

$_Combo_2 = GUICtrlCreateCombo('Ничего', 16, 40, 145, 25)
GUICtrlSetState(-1, $GUI_SHOW)

$_Input = GUICtrlCreateInput('', 30, 160, 230, 22)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $_Combo_2
            GUICtrlSetData($_Input, GUICtrlRead($_Combo_2))
        Case $_Combo_1
            Switch GUICtrlRead($_Combo_1)
                Case 'Список_A'
                    _CreateCombo($_Spisok_A)
                Case 'Список_В'
                    _CreateCombo($_Spisok_B)
				Case 'Список_C'
                    _CreateCombo($_Spisok_C)
            EndSwitch
    EndSwitch
WEnd

Func _CreateCombo($sData)
    GUICtrlSetData($_Combo_2, '|Ничего|'&$sData, 'Ничего') ; очистка списка с добавлением новых данных
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
at,
Можно еще так попробовать.
Код:
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

Global $aList[4][2] = [['|A|B|C', 'A'],['|Z|X|W', 'X'],['|K|L|M', 'M'],['|Список_А|Список_В|Список_С', 'Список_А']]

GUICreate('', 324, 123)
$nComboParent = GUICtrlCreateCombo('', 8, 24, 145, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $aList[3][0], $aList[3][1])
$nComboChild = GUICtrlCreateCombo('', 168, 24, 145, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $aList[0][0], $aList[0][1])
$nInput = GUICtrlCreateInput($aList[3][1] & @TAB & $aList[0][1], 8, 72, 305, 21, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
ReDim $aList[3][2]
GUISetState()
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nComboParent
			$iTmp = GUICtrlSendMsg($nComboParent, $CB_GETCURSEL, 0, 0)
			GUICtrlSetData($nComboChild, $aList[$iTmp][0], $aList[$iTmp][1])
			GUICtrlSetData($nInput, GUICtrlRead($nComboParent) & @TAB & $aList[$iTmp][1])
			$iTmp = 0
		Case $nComboChild
			GUICtrlSetData($nInput, GUICtrlRead($nComboParent) & @TAB & GUICtrlRead($nComboChild))
	EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
at
При выборе списка "С" отображается другой список.
На разном языке наверно. Я обычно делаю двойной клик на слове и дубликаты подсвечиваются, а тут не подсветился, значит не дубликат.
И еще один момент, нужно чтобы в Combo_2 По умолчанию был Список "А":
Ну это слишком просто, надо просто событие выполняющееся по клику сделать выполнения при старте программы, например перед входом в цикл опроса событий (или после комбо, при условии что переменные определены.
Код:
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>

Global $_Spisok_A = 'A|B|C'
Global $_Spisok_B = 'Z|X|W'
Global $_Spisok_C = 'K|L|M'
$_Form = GUICreate("", 316, 203, 346, 262)
GUICtrlCreateGroup("", 8, 1, 297, 193)
$_Combo_1 = GUICtrlCreateCombo('Список_A', 16, 16, 145, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Список_В|Список_С")

$_Combo_2 = GUICtrlCreateCombo('Ничего', 16, 40, 145, 25)
GUICtrlSetState(-1, $GUI_SHOW)

$_Input = GUICtrlCreateInput('', 30, 160, 230, 22)
GUISetState()
_CreateCombo($_Spisok_A)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $_Combo_2
            GUICtrlSetData($_Input, GUICtrlRead($_Combo_2))
        Case $_Combo_1
            Switch GUICtrlRead($_Combo_1)
                Case 'Список_A'
                    _CreateCombo($_Spisok_A)
                Case 'Список_В'
                    _CreateCombo($_Spisok_B)
                Case 'Список_С'
                    _CreateCombo($_Spisok_C)
            EndSwitch
    EndSwitch
WEnd

Func _CreateCombo($sData)
    GUICtrlSetData($_Combo_2, '|Ничего|'&$sData, 'Ничего') ; очистка списка с добавлением новых данных
EndFunc
 
Верх