Загружена ли форма?
От: Lemon Россия  
Дата: 23.04.02 09:03
Оценка:
По событию вызывается фрагмент кода:

Dim Refs As New frmRefs()
Refs.Show()

где frmRefs — класс формы.

Как оргранизовать проверку, чтобы форма не загружалась
дважды, при повторном возникновении события?
Re: Загружена ли форма?
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.04.02 09:19
Оценка:
Здравствуйте Lemon, Вы писали:

L>По событию вызывается фрагмент кода:

L>Dim Refs As New frmRefs()
L>Refs.Show()
L>где frmRefs — класс формы. Как оргранизовать проверку, чтобы форма не загружалась дважды, при повторном возникновении события?
В твоем варианте программы-обработчика события никак. Таково свойство New.
Нужно вынести объявление переменной в глобальную секцию, т.е. из программы-обработчика события в область имен.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Загружена ли форма?
От: Lemon Россия  
Дата: 23.04.02 09:27
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>В твоем варианте программы-обработчика события никак. Таково свойство New.

Vi2>Нужно вынести объявление переменной в глобальную секцию, т.е. из программы-обработчика события в область имен.

Но ведь в этом случае, при закрытии загруженной формы, она удаляется из памяти.
А при повторной попытке Refs.Show() возникает ошибка — объекта уже нет
Re[3]: Уточнение языка
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.04.02 09:30
Оценка:
Здравствуйте Lemon, Вы писали:

L>Но ведь в этом случае, при закрытии загруженной формы, она удаляется из памяти.

L>А при повторной попытке Refs.Show() возникает ошибка — объекта уже нет
Для какой системы и на каком языке все это делается?
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Уточнение языка
От: Lemon Россия  
Дата: 23.04.02 09:36
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>Для какой системы и на каком языке все это делается?


Visual Basic .NET под Windows2000(prof)
Re[5]: Под .NET - не знаю
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.04.02 09:38
Оценка:
Здравствуйте Lemon, Вы писали:

L>Visual Basic .NET под Windows2000(prof)
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[4]: Под VB6
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.04.02 09:49
Оценка: 1 (1)
Dim frm As New Form2

Private Sub Command1_Click()
  frm.Show
End Sub


Dim frm As Form2

Private Sub Command1_Click()
  If frm Is Nothing Then
    Set frm = New Form2
  End If
  frm.Show
End Sub

Здесь в обоих вариантах после закрытия Form2 она удаляется из коллекции Forms, однако само значение не обнуляется и объект не освобождается. Это видно, если с запущенной Form2 попытаться закрыть Form1. Form1 скрывается, а программа не завершается. Form2 всегда стартуют с начальными значениями, т.е. измененные контролы не сохраняются.

Тут есть завязка на Создание объекта|Удаление объекта, Load|Unload и Show|Hide состояниях. Где-то я видел описание соотношений между ними, точно не скажу, но похоже на картинку:
Создание объекта
   Load
      Show ' Доступ к свойствам
      Hide
   Unload
   ...
   Load
      Show ' Доступ к свойствам
      Hide
   Unload
Удаление объекта
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re: Forms коллекция
От: Vi2 Удмуртия http://www.adem.ru
Дата: 23.04.02 10:03
Оценка:
Здравствуйте Lemon, Вы писали:

L>По событию вызывается фрагмент кода:


L>Dim Refs As New frmRefs()

L>Refs.Show()

L>где frmRefs — класс формы.


L>Как оргранизовать проверку, чтобы форма не загружалась

L>дважды, при повторном возникновении события?
Если есть коллекция Forms (по крайней мере в VB6), то можно использовать ее для поиска твоей известной формы.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[2]: Forms коллекция
От: Lemon Россия  
Дата: 23.04.02 10:11
Оценка:
Здравствуйте Vi2, Вы писали:

Vi2>Если есть коллекция Forms (по крайней мере в VB6), то можно использовать ее для поиска твоей известной формы.


И еще много чего Вы писали

Большое спасибо за столь оперативный отклик, но мне надо время, чтобы поподробнее разобраться. Доки все на английском — скорость усвоения не очень высокая.
Re: Загружена ли форма?
От: Nuclear Россия http:\\smile.bel.ru
Дата: 24.04.02 08:22
Оценка: 1 (1)
Здравствуйте Lemon, Вы писали:

L>Как оргранизовать проверку, чтобы форма не загружалась

L>дважды, при повторном возникновении события?

Самым быстрым и правильным будет организовать поиск окна с использованием апи
функция FindWidow тебе поможет
Удачи
___________________________________
Хорошо жить хорошо когда жить хорошо
Re: Загружена ли форма?
От: AlexV Россия  
Дата: 26.04.02 10:50
Оценка: 1 (1)
Здравствуйте Lemon, Вы писали:

L>По событию вызывается фрагмент кода:


L>Dim Refs As New frmRefs()

L>Refs.Show()

L>где frmRefs — класс формы.


L>Как оргранизовать проверку, чтобы форма не загружалась

L>дважды, при повторном возникновении события?

Можно просто создать глобальную коллекцию открытых форм и перед загрузкой формы просто проверять — есть ли она в этой коллекции. Если есть — просто активировать ее. Если нет — создать снова (записав в коллекцию)
AlexV
Re[2]: Загружена ли форма?
От: Аноним  
Дата: 27.04.02 10:57
Оценка:
AV>Можно просто создать глобальную коллекцию открытых форм и перед загрузкой формы просто проверять — есть ли она в этой коллекции. Если есть — просто активировать ее. Если нет — создать снова (записав в коллекцию)

А если форма только одна, достаточно хранить ссылку на нее в глобальое переменной. что то-типа


dim a as myForm

...

if (a = Nothing) then

   a = new myForm()

end if

a.Show()



другой вариант — объявить в форме какую-нибудь shared переменную, и использовать ее в качестве, наример, счетчика
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.