Закрытие диалогового окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Закрытие диалогового окна

Сообщение Sun07 » 10.09.2006 (Вс) 19:18

При запуске программы не могу закрыть диалоговое окно, при нажатии на крестик оно как бы исчезает и появляется снова. Почему? Почему процедуры разных форм называются одинаково - Form?

'это процедура главной формы:
Private Sub Form_Activate()
frmDialog.Show vbModal
End Sub

'это процедура frmDialog:
Private Sub Form_Unload(Cancel As Integer)
Me.Hide
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.09.2006 (Вс) 19:22

Sun07, а у тебя в системе два окна могут быть активны одновременно?
Если нет, тогда подумай над своим кодом и его последствиями. Особенно над первой половиной, т.к. вторую можно выбросить, и ничего не изменится.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.09.2006 (Вс) 21:44

Надо подумать на досуге :) А почему при выполнении кода диалогового окна переменные, которые объявлены как Public и установлены до вызова диалогового окна, равны нулю?

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 10.09.2006 (Вс) 21:51

А может они установлены в 0 :wink: Ибо "не могёт такого быть" (с) :)


P.S.: Вариант 2: они объявлены еще и как внутренние...
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.09.2006 (Вс) 22:15

Всё, понял. Я до сих пор работал с одной формой и считал, что процедура Activate() вызывается один раз, после процедуры Load(). Я даже иногда думал, куда лучше лепить основной код (размеры контролов, установка начальных значений переменных и т.д.) в Load или Activate :) Теперь, когда я понял истинное назначение Activate благодаря диалоговому окну, буду писать код в Load. Насчёт переменных - я сам в шоке. Сейчас пересмотрю код и ничего опять не увижу :)

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 10.09.2006 (Вс) 23:28

Может это модальное диалоговое окно не видит эти переменные?

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.09.2006 (Пн) 0:26

Все оно видит. Может у тебя отсутствует инструкция Option Explicit?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.09.2006 (Пн) 10:42

если я ставлю Option Explicit в Declarations формы диалогового окна, то мне пишет, что переменная не определена, хотя она определена в Declarations формы главного окна - Public x1 as Long .

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.09.2006 (Пн) 10:44

Гы гы гы...
Какой забавный мальчик!

А почему ты решил, что переменная, объявленная в одном классе, доступна из другого? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.09.2006 (Пн) 10:51

Вот теперь он будет знать:
1. Что Option Explicit таки надо писать.
2. Что переменные имеют разные области видимости.

Хоршая добавка к уже полученному знанию различия между Form_Load и Form_Activate :D
Весь мир матрица, а мы в нем потоки байтов!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.09.2006 (Пн) 10:59

Еще он пока не знает, что переменная Public test, объявленная в форме Form1 из других модулей вызывается не как test, а как Form1.test :roll:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.09.2006 (Пн) 11:01

!Viper! писал(а):Вот теперь он будет знать:
1. Что Option Explicit таки надо писать.
Писать категорически запрещается, ибо где-нить, да забудешь :) Галочку ставить надо в специально отведенных для этого местах.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.09.2006 (Пн) 11:03

У меня нет галочки. Ненавижу эту галочку и всегда пишу.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 11.09.2006 (Пн) 11:08

гы гы! Я то думал Public достаточно. Оказывается, ещё имя формы надо :) СпасибА. Гы гы :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.09.2006 (Пн) 12:05

Sun07 писал(а):гы гы! Я то думал Public достаточно. Оказывается, ещё имя формы надо :) СпасибА. Гы гы :)

И опять неправильно.
Это относится к формам (классам), но Public в модуле глобален.
Lasciate ogni speranza, voi ch'entrate.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 11.09.2006 (Пн) 12:55

Похоже изучение VB идет у автора методом тыка, но мож все-таки книжки почитать?

2vvs_admВыставление галочки в соответствующем окне это конечно правильно (собственно так всегда и делаю). Но если в модуле не стоит Option Explicit, то просто поставив галочку мы ничего для этого модуля не изменим, в нем Option Explicit автоматически не появиться со всеми возможными последствиями
Весь мир матрица, а мы в нем потоки байтов!

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 14.09.2006 (Чт) 0:12

так оказывается в проэкте надо тягать модуль, чтобы в нём объявлять нормально общие переменные и константы (которые даже с указанием имени формы в другой форме не видны)?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 14.09.2006 (Чт) 7:36

вот Sun07 и еще кое-чего новое узнал. Public переменные в модуле доступны БЕЗ указания имени модуля. Public переменные в форме доступны при указании имени ЭКЗЕМПЛЯРА формы, то же касается и классов, хотя есть нюансы. В частности можно обращаться к Public переменной форме с указанием всего лишь имени формы, но это есть изврат и издевательство над ООП.
Весь мир матрица, а мы в нем потоки байтов!


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 126

    TopList