Что нового

Разный список значений в ComboBox

prokazzza

Новичок
Сообщения
160
Репутация
2
Нужна помощь, никак не могу догнать как сделать, чтобы при выборе Выбор1 - выпадал список c $Name1 по $Name5, а при выборе Выбор2 выпадал список $Name1-1 по $Name5-5:

Код:
$NameRe1 = 'Выбор1'
$NameRe2 = 'Выбор2'

$Group1 = GUICtrlCreateGroup("", 8, 150, 164, 57)
$e=''
For $i = 1 to 2
    $e&=Eval('NameRe' & $i)&'|'
Next
$e=StringTrimRight($e, 1)
$Combo1 = GUICtrlCreateCombo("", 16, 174, 147, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $e, $NameRe1)


$Name1 = '1'
$Name2 = '2'
$Name3 = '3'
$Name4 = '4'
$Name5 = '5'

$Name1-1 = '1-1'
$Name2-2 = '2-2'
$Name3-3 = '3-3'
$Name4-4 = '4-4'
$Name5-5 = '5-5'

$Group3 = GUICtrlCreateGroup("", 8, 275, 286, 57)
$e=''
For $i = 1 to 5
    $e&=Eval('Name' & $i)&'|'
Next
$e=StringTrimRight($e, 1)
$Combo3 = GUICtrlCreateCombo("", 16, 298, 270, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, $e, $Name1)
 
Автор
P

prokazzza

Новичок
Сообщения
160
Репутация
2
Ребят хотя бы ссылку на готовый скрипт или пример где реализована такая возможность, дальше я сам разберусь.
 

running-frag

why me?
Сообщения
441
Репутация
60
Код:
$Name1-1 = '1-1'
$Name2-2 = '2-2'
$Name3-3 = '3-3'
$Name4-4 = '4-4'
$Name5-5 = '5-5'

что это такое? это не обьявление переменных :D это раз
во вторых ты "это" вырвал из кода, как бы полностью нельзя?


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

Код:
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GUIComboBox.au3>
#include <StaticConstants.au3> 
#include <EditConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiListBox.au3>
#include <GuiEdit.au3>

#include <WinAPI.au3>
#include <WinAPIEx.au3>

#include <GDIPlus.au3>
#include <_XMLDomWrapper.au3>
#include <ScreenCapture.au3>
#include <GDIPlus.au3>

Local $hGui
Local $hAction
Local $hSelectType
Local $sChoice[3]
Local $sName[3][6]

$sChoice[1] = "Выбор1"
$sChoice[2] = "Выбор2"

$sName[1][1] = '1'
$sName[1][2] = '2'
$sName[1][3] = '3'
$sName[1][4] = '4'
$sName[1][5] = '5'

$sName[2][1] = '1-1'
$sName[2][2] = '2-2'
$sName[2][3] = '3-3'
$sName[2][4] = '4-4'
$sName[2][5] = '5-5'

$hGui = 			GUICreate ("gui", 300, 300)

$hSelectType = 		GUICtrlCreateCombo("selected type", 10, 10, 147, 25)
					GUICtrlSetData (-1, $sChoice[1]&"|"&$sChoice[2])
$hSelectData = 		GUICtrlCreateCombo("selected data", 10, 40, 147, 25)
					GUISetState (@SW_SHOW, $hGui)




While True
	$hAction = GUIGetMsg ()
	
	Select
		Case $hAction = $GUI_EVENT_CLOSE
			ExitLoop
		Case $hAction = $hSelectType
			;MsgBox (0,0,"type selected")
			
			For $i = 1 To 2	; choice number
				If GUICtrlRead ($hSelectType) == $sChoice[$i] Then
					_GUICtrlComboBox_BeginUpdate 	($hSelectData)
					_GUICtrlComboBox_ResetContent 	($hSelectData)
					For $k = 1 To 5 ; string count
						_GUICtrlComboBox_InsertString 	($hSelectData, $sName[$i][$k])
					Next
					
					_GUICtrlComboBox_EndUpdate 		($hSelectData)
				EndIf
			Next
	EndSelect
		
WEnd
 

madmasles

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

Global $iIndex, $aParent[3] = ['number', 'letter', 'LETTER'], $sText

GUICreate('MyGUI', 300, 100)
$nComboParent = GUICtrlCreateCombo('', 50, 40, 100, 20, $CBS_DROPDOWNLIST)
For $i = 0 To UBound($aParent) - 1
	$sText &= $aParent[$i] & '|'
Next
GUICtrlSetData($nComboParent, $sText, $aParent[Random(0, UBound($aParent) - 1, 1)])
$sText = ''
$nComboChild = GUICtrlCreateCombo('', 200, 40, 50, 20, $CBS_DROPDOWNLIST)
_Update_Combo($nComboParent, $nComboChild)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nComboParent
			_Update_Combo($nComboParent, $nComboChild)
	EndSwitch
WEnd

Func _Update_Combo($n_ComboParent, $n_ComboChild)
	Local $a_Data[3][5] = [['1', '2', '3', '4', '5'],['a', 'b', 'c', 'd', 'e'],['A', 'B', 'C', 'D', 'E']], _
			$s_Old_Date, $s_Date, $i_Index, $i_Old_Index

	$i_Index = GUICtrlSendMsg($n_ComboParent, $CB_GETCURSEL, 0, 0)
	$i_Old_Index = GUICtrlSendMsg($n_ComboChild, $CB_GETCURSEL, 0, 0)
	If $i_Index < 0 Then $i_Index = 0
	If $i_Old_Index < 0 Then $i_Old_Index = 0
	GUICtrlSetData($n_ComboChild, '')
	For $i = 0 To UBound($a_Data, 2) - 1
		$s_Date &= $a_Data[$i_Index][$i] & '|'
	Next
	$s_Old_Date = $a_Data[$i_Index][$i_Old_Index]
	GUICtrlSetData($n_ComboChild, $s_Date, $s_Old_Date)
EndFunc   ;==>_Update_Combo
 
Автор
P

prokazzza

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

А нельзя ли убрать привязку к:

Код:
Local $a_Data[3][5]


Просто в шапке значение 5 выставлено для примера (моя ошибка), на самом деле значения варьируются от 5 до 100, при выборе значения 5 вниз выпадает большой пустой список. И в функции реализовано запоминание последних значений, это тоже нельзя полностью вырезать ??
 

madmasles

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

$iItem = Random(10, 30, 1)
$iRow = Random(5, 31, 1)
ConsoleWrite($iItem & 'x' & $iRow - 1 & @LF)
Dim $aCombo[$iItem][$iRow]
For $i = 0 To $iItem - 1
	$aCombo[$i][0] = 'Key ' & $i + 1
	For $j = 1 To $iRow - 1
		$aCombo[$i][$j] = 'Value ' & $i + 1 & '-' & $j
	Next
Next
;_ArrayDisplay($aCombo)
GUICreate('MyGUI', 230, 100)
$nComboParent = GUICtrlCreateCombo('', 10, 40, 100, 20, $CBS_DROPDOWNLIST)
$sText = ''
$iItem = 0
$iRow = 0
For $i = 0 To UBound($aCombo) - 1
	$sText &= $aCombo[$i][0] & '|'
Next
GUICtrlSetData($nComboParent, $sText, $aCombo[0][0])
$sText = ''
$nComboChild = GUICtrlCreateCombo('', 120, 40, 100, 20, $CBS_DROPDOWNLIST)
_Update_Combo($nComboParent, $nComboChild)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nComboParent
			_Update_Combo($nComboParent, $nComboChild)
	EndSwitch
WEnd

Func _Update_Combo($n_ComboParent, $n_ComboChild)
	Local $i_Index, $s_Date
	$i_Index = GUICtrlSendMsg($n_ComboParent, $CB_GETCURSEL, 0, 0)
	If $i_Index < 0 Then $i_Index = 0
	GUICtrlSetData($n_ComboChild, '')
	For $i = 1 To UBound($aCombo, 2) - 1
		$s_Date &= $aCombo[$i_Index][$i] & '|'
	Next
	GUICtrlSetData($n_ComboChild, $s_Date, $aCombo[$i_Index][1])
EndFunc   ;==>_Update_Combo
 
Верх