Что нового

[Окна, Диалоги] Создание дочернего окна и обмен Родитель<->Потомок

McLotos

Новичок
Сообщения
20
Репутация
0
Добрый день, подскажите как сделать чтобы при создании нового окна оно стало родителем и закрыло предыдущее окно?
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
McLotos
Любое окно на сколько я понимаю само по себе независимо. Они делаются дочерними при специальном указании на это. Например посмотрите последний параметр GUICreate, MsgBox, InputBox.
 
Автор
McLotos

McLotos

Новичок
Сообщения
20
Репутация
0
Просто была немного ошибка в логике
Было сделано так
Создаётся окно авторизации, после нажатия кнопки ОК, если проверка прошла нормально, то окно должно открыть новое и закрыть само себя.
Не получалось закрыть первое окно так чтобы не убить приложение, решил эту ситуацию добавлением цикла вне окон, теперь могу создавать неограниченное количество окон и закрывать их в любом порядке.
Теперь правда возникла проблема с закрытием самого приложения, но я думаю её можно будет решить через killprocess =)
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
может так?
Код:
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Первое окно", 484, 188, 378, 365)
$Button1 = GUICtrlCreateButton("нажать", 200, 88, 75, 25)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case -3
			Exit
		Case $Button1
			GUISetState(@SW_HIDE,$Form1); или GUIDelete()
			_1()
	EndSwitch
WEnd

Func _1()
$Form2 = GUICreate("Второе окно", 484, 188, 378, 365)
GUISetState(@SW_SHOW)
Do
	$nMsg1 = GUIGetMsg()
	Switch $nMsg1
		Case -3
			Exit
	EndSwitch
Until $nMsg1 = -3
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Зачем лишние телодвижения?
Может проще так:
Код:
$Form1 = GUICreate("Первое окно", 484, 188, 378, 365)
$Button1 = GUICtrlCreateButton("нажать", 200, 88, 75, 25)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case -3         
			Exit	
		Case $Button1
            GUISetState(@SW_HIDE, $Form1); или GUIDelete()
			$Form2 = GUICreate("Второе окно", 484, 188, 378, 365)
			GUISetState()
    EndSwitch
WEnd



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

Вариант без кнопки:
Код:
$Form1 = GUICreate("Первое окно", 484, 188, 378, 365)
;$Button1 = GUICtrlCreateButton("нажать", 200, 88, 75, 25)
GUISetState()

While 1
    $aMsg=GUIGetMsg(1)
	Switch $aMsg[0]
        Case -3         
			If $aMsg[1]=$Form1 Then
				GUISetState(@SW_HIDE, $Form1); или GUIDelete()
				$Form2 = GUICreate("Второе окно", 484, 288, 378, 365)
				GUISetState()
			Else
				Exit	
			EndIf
	EndSwitch
WEnd
 

madmasles

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

While 1
	If MsgBox(33, 'Question', 'Next?') = 2 Then ExitLoop
	ConsoleWrite(_MyWindow(Random(1, 4, 1)) & @LF)
WEnd

Func _MyWindow($i_Num)
	Local $a_Title[4] = [3, 'Первое окно', 'Второе окно', 'Третье окно'], $h_Gui, $n_Inp, $i_W = Random(200, 400, 1), _
			$i_H = Random(200, 400, 1), $s_Ret = 'Error', $s_Text

	Switch $i_Num
		Case 1 To 3
			;OK
		Case Else
			Return $s_Ret
	EndSwitch
	For $i = 1 To 10
		$s_Text &= Chr(Random(192, 255, 1))
	Next
	$h_Gui = GUICreate($a_Title[$i_Num], $i_W, $i_H)
	$n_Inp = GUICtrlCreateInput($s_Text, Int(($i_W - 150) / 2), Int(($i_H - 20) / 2), 150, 20)
	GUISetState()
	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE
				$s_Ret = GUICtrlRead($n_Inp)
				GUIDelete($h_Gui)
				Return $s_Ret
		EndSwitch
	WEnd
EndFunc   ;==>_MyWindow
 
Верх