?
Zur Erklärung:
if (!Form2) // existiert Form2 schon?
{ // nein
try
{
Application->CreateForm(__classid(TForm2), &Form2); // eine Instanz von TForm2 wird erzeugt und der Applications-Variable Form2 zugewiesen.
}
catch(...)
{ // Fehler bein Erzeugen des Formulars abfangen
ShowMessage("Fehler: Form xyz kann nicht erzeugt werden.\nVorgang abgebrochen.");
return;
}
}
Diese Version ist gängig, wenn man aus Performancegründen nicht alle Formulare beim Programmstart erzeugen will, sondern erst dann, wenn sie tatsächlich benötigt werden. Sie bleiben bis zum Programmende erhalten.
Relevant ist eigentlich nur dieser Code:
if (!Form2)
{
Application->CreateForm(__classid(TForm2), &Form2);
}
Bezüglich deines Lösungsansatzes mit new:
Du solltest nicht den Namen Form2 verwenden.
Was immer Du dort eingibst, zur Zeit this bei der Erzeugung des Formulars steht, ist für die Löschung des Formulars verantwortlich. Wenn Du das nicht willst, kannst Du dort NULL übergeben. Dann bist Du für die Löschung des Formulars verantwortlich. Ein delete sollte sich immer im gleichen Gültigkeitsraum, wie das new befinden.
z.B.:
TForm2* MyForm2 = new TForm2;
MyForm2->ShowModal();
delete MyForm2;