Что нового

[Окна, Диалоги] Смена условия для Case в зависимости от значения Radio

fortages

Новичок
Сообщения
81
Репутация
3
Помогите пожалуйста разобраться, что именно сделала неправильно.
Нужно чтобы программа работала по этому алгоритму:

Пользователь выбирает Radio (этим определяются по какому методу/функции дальше работать), потом нажимает кнопку "ОК" ($Button1) и после этого запускается функция (1 или 2). Функция, которая вызывается по нажатию кнопки "Проверить" в любом случае одинакова.

Но у меня получилось немного не то: пользователь выбирает Radio и сразу после нажатия запускается функция (соответствующая выбору, как и должно быть). Но почему функция не запускается после нажатия кнопки? Это неудобно, т.к. может понадобиться работа с _DefaultFunc() ("Проверить").
Подскажите, что я делаю не так? Почему кнопка "ОК" получилась не задействована?

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


$Window = GUICreate("Test",1029, 698, 7, 0)

$Login = GUICtrlCreateLabel("Login", 8, 48, 32, 17)
$Password = GUICtrlCreateLabel("Password", 8, 80, 21, 17)
$Login_Input = GUICtrlCreateInput("", 48, 48, 105, 21)
$Password_Input = GUICtrlCreateInput("", 48, 72, 105, 21)

$Radio1 = GUICtrlCreateRadio("Radio1", 8, 112, 70, 15)
$Radio2 = GUICtrlCreateRadio("Radio2", 88, 112, 70, 15)

$Button1 = GUICtrlCreateButton("ОК", 8, 136, 65, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Проверить", 88, 136, 65, 25, $WS_GROUP)



GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()

  Select
    Case $nMsg 
		if  GUICtrlRead ( $Radio1  ) = $GUI_CHECKED then
        MsgBox(1, "Включен элемент ","Включен Radio1")
			Select
				Case $Button1
					MsgBox(0,"0","запустили скрипт для Radio1")
				_Func1()
				Case $Button2
					_DefaultFunc()
			EndSelect
		Exit
	;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
		ElseIf GUICtrlRead ( $Radio2  ) = $GUI_CHECKED then
		MsgBox(1, "Включен элемент ","Включен элемент Radio2")
			Select 
				Case $Button1
					MsgBox(0,"0","запустили скрипт для Radio2")
					_Func2()
				Case $Button2
					_DefaultFunc()
			EndSelect
		Exit
		EndIf
  EndSelect
	
Wend
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
Можно так:
Код:
#include <ButtonConstants.au3>
#include <GuiButton.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("18110", 136, 156, 192, 114)
$Radio1 = GUICtrlCreateRadio("Деление", 24, 21, 89, 17, $WS_GROUP)
_GUICtrlButton_SetCheck(-1, $BST_CHECKED)
$Radio2 = GUICtrlCreateRadio("Умножение", 24, 45, 97, 17)
$Button1 = GUICtrlCreateButton("Действие", 30, 115, 75, 25)
$Input1 = GUICtrlCreateInput("2", 24, 78, 33, 21)
$Input2 = GUICtrlCreateInput("2", 75, 78, 33, 21)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		 Case $Button1
			If BitAND(_GUICtrlButton_GetState($Radio1), $BST_CHECKED) = $BST_CHECKED Then
			   _Func1(GUICtrlRead($Input1), GUICtrlRead($Input2))
			ElseIf BitAND(_GUICtrlButton_GetState($Radio2), $BST_CHECKED) = $BST_CHECKED Then
			   _Func2(GUICtrlRead($Input1), GUICtrlRead($Input2))
			EndIf
	EndSwitch
WEnd

Func _Func1($a, $b)
   MsgBox(0, 'Деление', StringFormat('%d / %d = %d', $a, $b, $a / $b))
EndFunc

Func _Func2($a, $b)
   MsgBox(0, 'Умножение', StringFormat('%d * %d = %d', $a, $b, $a * $b))
EndFunc
 
Автор
fortages

fortages

Новичок
Сообщения
81
Репутация
3
Спасибо, Garrett! Про _GUICtrlButton_GetState не знала, теперь почитаю. По примеру разобралась и все получилось. Благодарю! :smile:
 
Верх