Что нового

[Элементы GUI] Нет реакции от чекбоксов на второй вкладке хотя галочки проставлены.

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1

В главном окне создал две вкладки. На каждой вкладке чекбоксы со своими заданиями. Так вот, что-бы я не выбирал, отрабатывают задания только от чекбоксов что на первой вкладке.

Код:
;Отобразить главное окно

	Global $i, $iCount

	Global $hGui = GUICreate("DAU", 175, 410, -1, -1, $WS_SYSMENU, $WS_EX_TOPMOST)
	Global $nButton1 = GUICtrlCreateButton("Загрузить", 35, 350, 90)
	Global $tab = GUICtrlCreateTab(2, 2, 167, 345, $TCS_SCROLLOPPOSITE)
	GUICtrlCreateTabItem("Утилиты")
	GUICtrlCreateLabel("Версии антивирусных утилит", 5, 30, 158, -1, $SS_SUNKEN, BitOR($SS_CENTER, $SS_ETCHEDFRAME, $SS_WHITEFRAME))
	GUICtrlSetTip(6, $DrWeb & @CRLF & $Kasp & @CRLF & $AVZ & @CRLF & $VerMBAM & @CRLF & $Hijack & @CRLF & $UVS & @CRLF & $GMER & @CRLF & $McA & @CRLF & $COFulV & @CRLF & $EKitFulV & @CRLF & $VUploaderFulAdrV & @CRLF & $HPFulDataU & @CRLF & $CBFFulDataU & @CRLF & $ATMFulData, 'Наличие версий программ', 1, 3)

	Global $aCheckbox[15] = [14, 'Dr.Web CureIt!', 'Kaspersky AVP Tool', 'Malwarebytes', 'AVZ', 'HijackThis', 'UVS', 'GMER', 'McAfee-Stinger', 'COMODO CE', 'Emsisoft EKit', 'VirusTotal Uploader', 'Hitman Pro', 'ComboFix', 'AnVir Task Manager']

	;Отрисовка чекбоксов
	For $i = 1 To $aCheckbox[0]
	$aCheckbox[$i] = GUICtrlCreateCheckbox($aCheckbox[$i], 8, 60 + ($i - 1) * 20)
	Next
	GUICtrlSetState(-1, $GUI_SHOW) ; будет отображаться выбранной

	GUICtrlCreateTabItem("CD-DVD-USB")
	GUICtrlCreateLabel("Версии cd-dvd-usb утилит", 5, 30, 158, -1, $SS_SUNKEN, BitOR($SS_CENTER, $SS_ETCHEDFRAME, $SS_WHITEFRAME))
	GUICtrlSetTip(22, $DrFulDataU & @CRLF & $DrFulDataC & @CRLF & $KFulAdrV & @CRLF & $AFulAdr & @CRLF & $NODFulAdr & @CRLF & $BitDefFulAdr & @CRLF & $TrendFulAdr & @CRLF & $eScanFulAdrV & @CRLF & $COFAdrCDV & @CRLF & $AVGFulV & @CRLF & $TPFulAdrV & @CRLF & $VBAFulDataU & @CRLF & $SMSFulDataU & @CRLF & $mFileNameP, 'Наличие версий дисков', 1, 3)

	Global $bCheckbox[15] = [14, 'Dr.Web LiveCD', 'Dr.Web LiveUSB', 'Kaspersky Rescue Disk', 'Avira Rescue System', 'ESET NOD32 LiveCD', 'BitDefenderRescueCD', 'Trend Micro Rescue Disk', 'eScanLiveCD', 'Comodo RD', 'AVG RD', 'TrustPort LCD', 'VBA32 Rescue', 'AntiSMS', 'PC Tools AOSS CD']
	For $i = 1 To $bCheckbox[0]
		$bCheckbox[$i] = GUICtrlCreateCheckbox($bCheckbox[$i], 8, 60 + ($i - 1) * 20)
	Next
	GUICtrlCreateTabItem("") ; определяет конец вкладок

	GUISetState()

;Цикл выполнения основных функций GUI
While 1
Switch GUIGetMsg()
	Case $GUI_EVENT_CLOSE
		MFLog()
		MFClearTemp()
		Exit
	Case $nButton1
		HotKeySet('s')
		HotKeySet('h')
		HotKeySet('c')
		$iCount = 0
	For $i = 1 To $aCheckbox[0]
	 If BitAND(GUICtrlRead($aCheckbox[$i]), $GUI_CHECKED) Then
		Sleep(100)
		$iCount += 1
		Execute('_' & $i & '()')
		ConsoleWrite(@error & @LF)
	EndIf
Next

	For $i = 1 To $bCheckbox[0]
	 If BitAND(GUICtrlRead($bCheckbox[$i]), $GUI_CHECKED) Then
		Sleep(100)
		$iCount += 1
		Execute('_' & $i & '()')
		ConsoleWrite(@error & @LF)
	EndIf
Next
		If Not $iCount Then
			MsgBox(16+262144, 'Error', 'Ничего не выбрано!!!', 0)
			MFLogBad()
			MFClearTemp()
			Exit
		EndIf
	MFLog()
	MFClearTemp()
	Exit
EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
ivsatel
Потому что для второй вкладки идентификаторы чекбоксов вставляются в тот же массив, где раньше были идентификаторы первой вкладки. То есть, если на обоих вкладках 30 чекбоксов то идентификаторов тоже должно быть 30, а не 15.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ivsatel,
Вроде, все нормально (у меня).
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TabConstants.au3>
#include <StaticConstants.au3>

Global $hGui = GUICreate("DAU", 175, 410, -1, -1, $WS_SYSMENU, $WS_EX_TOPMOST)
Global $nButton1 = GUICtrlCreateButton("Загрузить", 35, 350, 90)
Global $tab = GUICtrlCreateTab(2, 2, 167, 345, $TCS_SCROLLOPPOSITE)
GUICtrlCreateTabItem("Утилиты")
GUICtrlCreateLabel("Версии антивирусных утилит", 5, 30, 158, -1, $SS_SUNKEN, BitOR($SS_CENTER, $SS_ETCHEDFRAME, $SS_WHITEFRAME))
;GUICtrlSetTip(6, $DrWeb & @CRLF & $Kasp & @CRLF & $AVZ & @CRLF & $VerMBAM & @CRLF & $Hijack & @CRLF & $UVS & @CRLF & $GMER & @CRLF & $McA & @CRLF & $COFulV & @CRLF & $EKitFulV & @CRLF & $VUploaderFulAdrV & @CRLF & $HPFulDataU & @CRLF & $CBFFulDataU & @CRLF & $ATMFulData, 'Наличие версий программ', 1, 3)

Global $aCheckbox[15] = [14, 'Dr.Web CureIt!', 'Kaspersky AVP Tool', 'Malwarebytes', 'AVZ', 'HijackThis', 'UVS', 'GMER', 'McAfee-Stinger', 'COMODO CE', 'Emsisoft EKit', 'VirusTotal Uploader', 'Hitman Pro', 'ComboFix', 'AnVir Task Manager']

;Отрисовка чекбоксов
For $i = 1 To $aCheckbox[0]
	$aCheckbox[$i] = GUICtrlCreateCheckbox($aCheckbox[$i], 8, 60 + ($i - 1) * 20)
	If Random(0, 1, 1) Then GUICtrlSetState(-1, $GUI_CHECKED)
Next

GUICtrlCreateTabItem("CD-DVD-USB")
GUICtrlCreateLabel("Версии cd-dvd-usb утилит", 5, 30, 158, -1, $SS_SUNKEN, BitOR($SS_CENTER, $SS_ETCHEDFRAME, $SS_WHITEFRAME))
;GUICtrlSetTip(22, $DrFulDataU & @CRLF & $DrFulDataC & @CRLF & $KFulAdrV & @CRLF & $AFulAdr & @CRLF & $NODFulAdr & @CRLF & $BitDefFulAdr & @CRLF & $TrendFulAdr & @CRLF & $eScanFulAdrV & @CRLF & $COFAdrCDV & @CRLF & $AVGFulV & @CRLF & $TPFulAdrV & @CRLF & $VBAFulDataU & @CRLF & $SMSFulDataU & @CRLF & $mFileNameP, 'Наличие версий дисков', 1, 3)

Global $bCheckbox[15] = [14, 'Dr.Web LiveCD', 'Dr.Web LiveUSB', 'Kaspersky Rescue Disk', 'Avira Rescue System', 'ESET NOD32 LiveCD', 'BitDefenderRescueCD', 'Trend Micro Rescue Disk', 'eScanLiveCD', 'Comodo RD', 'AVG RD', 'TrustPort LCD', 'VBA32 Rescue', 'AntiSMS', 'PC Tools AOSS CD']
For $i = 1 To $bCheckbox[0]
	$bCheckbox[$i] = GUICtrlCreateCheckbox($bCheckbox[$i], 8, 60 + ($i - 1) * 20)
	If Random(0, 1, 1) Then GUICtrlSetState(-1, $GUI_CHECKED)
Next
GUICtrlCreateTabItem("") ; определяет конец вкладок

GUISetState()

;Цикл выполнения основных функций GUI
While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton1
			$iCount_a = 0
			$iCount_b = 0
			For $i = 1 To $aCheckbox[0]
				If BitAND(GUICtrlRead($aCheckbox[$i]), $GUI_CHECKED) Then
					ConsoleWrite('a  ' & ControlGetText($hGui, '', $aCheckbox[$i]) & @LF)
					$iCount_a += 1
				EndIf
			Next
			ConsoleWrite('---' & @LF)
			For $i = 1 To $bCheckbox[0]
				If BitAND(GUICtrlRead($bCheckbox[$i]), $GUI_CHECKED) Then
					ConsoleWrite('b  ' & ControlGetText($hGui, '', $bCheckbox[$i]) & @LF)
					$iCount_b += 1
				EndIf
			Next
			ConsoleWrite('---' & @LF)
			ConsoleWrite('$iCount_a: ' & $iCount_a & @LF)
			ConsoleWrite('$iCount_b: ' & $iCount_b & @LF)
	EndSwitch
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
в принципе можно все в один массив засунуть
так
Код:
#include <GUIConstants.au3>
#include <GuiTab.au3>
Dim $checkbox[7]
$form = GUICreate("", 299, 300, -1, -1)
$tab = GUICtrlCreateTab(-1, -1, 300, 300, $TCS_MULTILINE)
$tab1 = GUICtrlCreateTabItem("1")
$checkbox[1] = GUICtrlCreateCheckbox("Checkbox1", 24, 72, 97, 17)
$checkbox[2] = GUICtrlCreateCheckbox("Checkbox2", 24, 104, 97, 17)
$checkbox[3] = GUICtrlCreateCheckbox("Checkbox3", 24, 136, 97, 17)
GUICtrlCreateTabItem("")

$tab2 = GUICtrlCreateTabItem("2")
$checkbox[4] = GUICtrlCreateCheckbox("Checkbox4", 24, 72, 97, 17)
$checkbox[5] = GUICtrlCreateCheckbox("Checkbox5", 24, 104, 97, 17)
$checkbox[6] = GUICtrlCreateCheckbox("Checkbox6", 24, 136, 97, 17)
GUICtrlCreateTabItem("")

$Button1 = GUICtrlCreateButton("Button1", 200, 200, 75, 25)
GUISetState(@SW_SHOW)

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

Func _11()
	For $i = 1 To UBound($checkbox) - 1
		If GUICtrlRead($checkbox[$i]) = $GUI_CHECKED Then
			Execute('_' & $i & '()')
		EndIf
	Next
EndFunc   ;==>_11

Func _1()
	MsgBox(0, '', '1')
EndFunc   ;==>_1
Func _2()
	MsgBox(0, '', '2')
EndFunc   ;==>_2
Func _3()
	MsgBox(0, '', '3')
EndFunc   ;==>_3
Func _4()
	MsgBox(0, '', '4')
EndFunc   ;==>_4
Func _5()
	MsgBox(0, '', '5')
EndFunc   ;==>_5
Func _6()
	MsgBox(0, '', '6')
EndFunc   ;==>_6

или так

Код:
#include <GUIConstants.au3>
#include <GuiTab.au3>
Global $checkbox[7]=[6,'Dr.Web LiveUSB','Kaspersky Rescue Disk','BitDefenderRescueCD','ESET NOD32 LiveCD','Avira Rescue System','Dr.Web LiveCD']
$form = GUICreate("", 299, 300, -1, -1)
$tab = GUICtrlCreateTab(-1, -1, 300, 300, $TCS_MULTILINE)
$tab1 = GUICtrlCreateTabItem("1")
 For $i = 1 To UBound($checkbox) - 4
    $checkbox[$i] = GUICtrlCreateCheckbox($checkbox[$i], 24, 72 + ($i - 1)*20)
Next
GUICtrlCreateTabItem("")

$tab2 = GUICtrlCreateTabItem("2")
 For $i =  4 To UBound($checkbox) - 1
    $checkbox[$i] = GUICtrlCreateCheckbox($checkbox[$i], 24, 12 + ($i - 1)*20)
Next

GUICtrlCreateTabItem("")
$Button1 = GUICtrlCreateButton("Button1", 200, 200, 75, 25)
GUISetState(@SW_SHOW)

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

Func _11()
    For $i = 1 To UBound($checkbox) - 1
        If GUICtrlRead($checkbox[$i]) = $GUI_CHECKED Then
            Execute('_' & $i & '()')
        EndIf
    Next
EndFunc   ;==>_11

Func _1()
    MsgBox(0, '', 'Dr.Web LiveUSB')
EndFunc  
Func _2()
    MsgBox(0, '', 'Kaspersky Rescue Disk')
EndFunc  
Func _3()
    MsgBox(0, '', 'BitDefenderRescueCD')
EndFunc  
Func _4()
    MsgBox(0, '', 'ESET NOD32 LiveCD')
EndFunc  
Func _5()
    MsgBox(0, '', 'Avira Rescue System')
EndFunc  
Func _6()
    MsgBox(0, '', 'Dr.Web LiveCD')
EndFunc
 
Верх