[Delphi]Hoe om te gaan met instantiatie forms

Pagina: 1
Acties:

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Ik heb een programma waarbij ik form: frmKiesSpelers wil aanroepen in de FormCreate methode van mijn hoofdform: frmBord.

Het probleem waar ik tegen aanloop is dat frmKiesSpelers nil is op die plek.
Nu weet ik ook waarom dat zo is, dit is omdat de volgorde waarin mijn applicatie de forms creeerd als volgt is:

Delphi:
1
2
3
4
5
Application.Initialize;
Application.Title := 'Blaat';
Application.CreateForm(TfrmBord, frmBord);
Application.CreateForm(TfrmKiesSpelers, frmKiesSpelers);
Application.Run;


De frmKiesSpelers is dus nog helemaal niet geinstantieerd. Als ik de volgorde omdraai dan werkt het wel, maar dan start daarna mijn programma met frmKiesSpelers als formulier, en dat moet juist frmBord zijn.

Nu kan ik natuurlijk die application.createform van frmKiesSpelers weghalen en zelf een instantie van frmKiesSpelers maken in frmBord.
Dit kan ik doen door frmKiesSpelers := TfrmKiesSpelers.Create(self); te doen maar zelf heb ik het idee dat dit geen nette manier is om zoiets op te lossen.

Dus daarom wou ik graag jullie mening hier over horen....

Even ter verduidelijking: Er zijn veel meer forms in mijn programma en ik de weergegeven code is maar een voorbeeld.

Mocht de topic title onduidelijk zijn, mijn excuses, had nogal moeite om een goede titel te bedenken, een modje mag m natuurlijk zo veranderen mocht hij/zij een betere weten. :)

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

In feite gebruik je de AutoCreate alleen voor je MainForm. Al je andere forms creeer je zelf wanneer je ze nodig hebt. Die TfrmKiesSpelers.Create is dus de nette oplossing. Vaak haalt met de globale variable van een form (frmKiesSpelers) ook weg om niet in verwarring te raken.

We adore chaos because we like to restore order - M.C. Escher


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Die form wordt ook alleen maar gebruikt in de formCreate van mn MainForm. Dus die heeft een lokale var van die form. Om m globaal te maken was ook totaal onnodig dus :)