2 Вопроса в 1: Активная форма и Unload

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

2 Вопроса в 1: Активная форма и Unload

Сообщение LexBondAgent007 » 29.06.2005 (Ср) 15:04

Привет всем еще раз! Вот столкнулся с двумя проблемами:

1) (Везде искал - но не нашел):
Предположим: в проекте находиться 17 форм. Как можно узнать - какая форма в данный момент Visible/Видна?
Только плиз не предлагать операторы Case или If :?

2) А заодно:
Как сделать действие - когда Юзер нажимает на форме на кнопочку Х (т.е. выход) - и главное - чтобы в процессе form unload этот код не повторялся!!! :? :?:
Это не читайте! Это спам! :D

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 29.06.2005 (Ср) 15:21

1) Коллекция Forms содержит все загруженные формы.
Код: Выделить всё
'в коде формы
Dim objFrm As Form
For Each objFrm In Forms
    If objFrm.Visible Then Debug.Print objFrm.Name
Next

2) события Unload и QueryUnload формы. Лучше использовать последнее.
Моду создают модоки, а распространяют модозвоны.

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 29.06.2005 (Ср) 17:40

Насчет первого ОГРОМНОЕ СПАСИБ!!! РАБОТАЕТ ВСЕ ОТЛИЧНО!!!! :lol:

А вот насчет второго: может не совсем ясно написАл что требуется:

Если Юзер нажмет на кнопочку Х (Выход) то
Код: Выделить всё
tochno = msgbox("Do you really want to quit?", 48, "Confirm")
if tochno = vb.yes then End
Ну или что то вроде...


Вот! А бывают моменты когда форму где прописан вышеуказанный код НУЖНО ВЫГРУЗИТЬ ПРОГРАММНО, т.е.
Код: Выделить всё
Unload Form1


И как сделать так чтобы сообщение появлялось тока тогда, когда Юзер жмет на кнопку Х - а в остальных случаях форма выгружалась без к/л сообщений и других действий? :?: :?
Это не читайте! Это спам! :D

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 29.06.2005 (Ср) 17:46

Следует выделить код, который ты привел, в отдельную процедуру. И вызывать ее тогда, когда форма "умирает" или ты ее хочешь "прибить". Вот пример:
Код: Выделить всё
'...

Sub ReallyWant()
    Dim tochno As VbMsgBoxResult
    tochno = msgbox("Do you really want to quit?", vbYesNo + vbQuestion, "Confirm")
    if tochno = vbYes then End
End If

'другие действия...

'убийство формы
ReallyWant
Моду создают модоки, а распространяют модозвоны.

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 29.06.2005 (Ср) 19:36

Все таки ты меня не допонял :lol:
Или я торможу: но вот осуществил твой пример - и это ничего не дало - посмотри:
http://lehas-entertainment.narod.ru/unloadform.zip

И сразу поймешь - что я имею ввиду
Это не читайте! Это спам! :D

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 29.06.2005 (Ср) 20:03

Может я туплю, а может это нужно ? :roll:
Код: Выделить всё
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Чё серьёзно, что ли ??!!", vbYesNo, "КУДА ПОШЁЛ ТО ??") = vbYes Then
Cancel = 0
Else
Cancel = 1
End If
End Sub

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 29.06.2005 (Ср) 20:07

Не-а - нужно:

If Юзер жмет на крестик то:
Завершение приложения (End)

If Юзер жмет к/л кнопку на форме то:
СледФорма.Visible = Тру
Unload ЭтаФорма

Теперь то все поняли?? :lol:
Это не читайте! Это спам! :D

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 29.06.2005 (Ср) 20:11

Виноват. Не разобрался с вопросом. :oops:

Сейчас сижу думаю. :D

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 29.06.2005 (Ср) 20:15

Код: Выделить всё
Dim UNLOADFLAG As Boolean
Private Sub Command1_Click()
UNLOADFLAG = True
Unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
If Not UNLOADFLAG Then
If MsgBox("Чё серьёзно, что ли ??!!", vbYesNo, "КУДА ПОШЁЛ ТО ??") = vbYes Then
Cancel = 0
Else
Cancel = 1
End If
End If
End Sub


Вот чего надумал... Но всё таки надо Cancel как нибудь погонять..... :roll:

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 30.06.2005 (Чт) 6:26

Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

The unloadmode argument returns the following values:

Constant....................Description
vbFormControlMenu....The user chose the Close command from the Control menu on the form.
vbFormCode..............The Unload statement is invoked from code.
vbAppWindows...........The current Microsoft Windows operating environment session is ending.
vbAppTaskManager....The Microsoft Windows Task Manager is closing the application.
vbFormMDIForm........An MDI child form is closing because the MDI form is closing.
vbFormOwner............A form is closing because its owner is closing.
Код: Выделить всё
Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
...
If unloadmode = vbFormControlMenu Then
    tochno = msgbox("Do you really want to quit?", vbYesNo + vbQuestion, "Confirm")
    If tochno <> vbYes Then
        cancel = True
...
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

LexBondAgent007
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 10.05.2005 (Вт) 16:11
Откуда: Россия - Москва - ЦАО

Сообщение LexBondAgent007 » 30.06.2005 (Чт) 8:51

СПАСИБО СПАСИБО!!!
ALX_2002 и Vi

Оба совета отлично работают!!!!!! :lol: :lol:
Это не читайте! Это спам! :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot], SemrushBot и гости: 84

    TopList  
cron