Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка на существование объекта

315
14 июля 2006 года
Nick_M
399 / / 29.05.2003
Как в можно проверить существует ли какая-либо форма? Идея такая: создавать формы не при запуске, а в процессе работы. При обращении к ней, если ее еще не существует, то создавать. Собственно зациклился на проверке.
6.9K
14 июля 2006 года
RZ_RZ
53 / / 09.06.2005
А что если обращение к форме заключить в try ... и при возникновении исключения делать вывод что ее еще нет.

Или в начале указатель на форму присваивать к NULL и потом проверять перед обращением.
315
14 июля 2006 года
Nick_M
399 / / 29.05.2003
Использовать try конечно можно и это работает, но хотелось бы обойтись без исключений
6.9K
14 июля 2006 года
RZ_RZ
53 / / 09.06.2005
Ну или переменную заведи глобальную для кажд формы и в конструкторе формы ее устанавливай.
315
14 июля 2006 года
Nick_M
399 / / 29.05.2003
[QUOTE=RZ_RZ]Ну или переменную заведи глобальную для кажд формы и в конструкторе формы ее устанавливай.[/QUOTE]
Уже думал над этим вариантом. Видимо так и буду делать, спасибо.
8.7K
14 июля 2006 года
Rubicon
55 / / 28.10.2005
[QUOTE=Nick_M]Уже думал над этим вариантом. Видимо так и буду делать, спасибо.[/QUOTE]
а не проще указатель на форму за-NULL-ять и перед созданием проверять на NULL? после уничтожения, соответственно, опять присваивать указателю NULL? И никаких лишних переменных не надо! всегда использовал такой метод, никогда не подводило.
1
15 июля 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Nick_M]Уже думал над этим вариантом. Видимо так и буду делать, спасибо.[/QUOTE]
Вариант с глобальной переменной - один из наиболее неудачных и не верных.
Если необходимо проверять есть созданная форма данного класса или нет - используйте в ее конструкторе мютекс (и при закрытии соответственно закрывайте). Тогда не будет головной боли с глобальными переменными и т.п. И естественно указатель тоже надо обнулять. В общем виде код выглядит так:
Код:
bool IsCreate;
HANDLE Form2IsCreate;
__fastcall TForm2::Form2(TComponent *Owner):TForm(TComponent *Owner)
{
IsCreate = false;
 Form2IsCreate = CreateMutex(NULL,true,"Form2IsCreate");
 
if(!Form2IsCreate){
 IsCreate = true;
//Уже есть такая форма
//Далее выполняете действия  - например закрытие формы.
}
//А здесь - если форма создана в первые.
 ...
}
void __fastcall TForm2::FormClose(TObject *Sender,TCloseAction &Action)
{
 if(!IsCreate)  CloseHandle(Form2IsCreate);
 Action = caFree;
}

Естественно для разных классов форм название мютексов должно быть разным - я надеюсь почему объяснять не надо?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог