我试图想出一种方法来判断给定类型的表单是否在我的应用程序中打开,然后再打开一个新表单。这样做的原因是,应用程序中有某些形式,一次只打开一个实例才有意义,但我宁愿不让它们严格模态化。
为了解决这个问题,我实现了以下方法,它迭代Screen->Forms
并尝试将每个表单转换为提供的表单类型。我想如果演员表已经制作好了,我发现这种类型的表格已经打开了。
template <typename T>
bool __fastcall FormOfTypeExists( T * Form )
{
for( int i = 0; i < Screen->FormCount; i++ )
{
T * CurrentForm = (T*)Screen->Forms[i];
if( CurrentForm != 0 )
{
return true;
}
}
return false;
};
然后我在尝试创建表单的任何地方调用该方法,如下所示:
TFormA *Form;
if( FormOfTypeExists( Form ) )
{
return;
}
Form = new TFormA( Owner );
Form->Show();
我遇到的问题是,我似乎总是能够成功地将TCommonCustomForm
对象Screen->Forms
转换为我传入的任何类型的形式。
有没有办法可以改变我的逻辑以成功检测应用程序中是否已经存在某种类型的表单?有没有更好的方法来解决我应该研究的这个问题?