新しいフォームを開く前に、アプリケーションで特定の種類のフォームが開いているかどうかを確認する方法を考え出そうとしています。この理由は、一度に 1 つのインスタンスを開くだけで意味のあるアプリケーションの特定のフォームがあるためですが、それらを厳密にモーダルにしたくないからです。
これを解決するために、次のメソッドを実装しました。これ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
特定のタイプのフォームがアプリケーションに既に存在するかどうかを正常に検出するようにロジックを変更する方法はありますか? 私が見なければならないこの問題へのより良いアプローチはありますか?