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;
}
Проверка на существование объекта
Как в можно проверить существует ли какая-либо форма? Идея такая: создавать формы не при запуске, а в процессе работы. При обращении к ней, если ее еще не существует, то создавать. Собственно зациклился на проверке.
Или в начале указатель на форму присваивать к NULL и потом проверять перед обращением.
Использовать try конечно можно и это работает, но хотелось бы обойтись без исключений
Ну или переменную заведи глобальную для кажд формы и в конструкторе формы ее устанавливай.
Уже думал над этим вариантом. Видимо так и буду делать, спасибо.
а не проще указатель на форму за-NULL-ять и перед созданием проверять на NULL? после уничтожения, соответственно, опять присваивать указателю NULL? И никаких лишних переменных не надо! всегда использовал такой метод, никогда не подводило.
Вариант с глобальной переменной - один из наиболее неудачных и не верных.
Если необходимо проверять есть созданная форма данного класса или нет - используйте в ее конструкторе мютекс (и при закрытии соответственно закрывайте). Тогда не будет головной боли с глобальными переменными и т.п. И естественно указатель тоже надо обнулять. В общем виде код выглядит так:
Код:
Естественно для разных классов форм название мютексов должно быть разным - я надеюсь почему объяснять не надо?