OnCreate wird ausgeführt, wenn das Formular erzeugt wird. Falls Du die automatische Formularerstellung eingeschaltet hast, werden die Formulare beim START des Programmes erzeugt. Dann ist es vermutlich etwas zu früh, die Listbox mit Daten zu befüllen.
OnShow wird immer aufgerufen, bevor das Formular sichtbar wird.
OnActivate wird immer aufgerufen, wenn das Formular angeklickt wird (und vorher im Hintergrund war)
Du musst vielleicht ein wenig aufpassen, denn die beiden Events werden also während der Lebensdauer eines Formulars öfter aufgerufen.
Wenn ich etwas nur beim erstmaligen Anzeigen eines Formulars ausführen will, merke ich mir einfach, ob die Routine schon durchlaufen wurde, etwa so:
Delphi-Quellcode:
Procedure TMyForm.OnActivate (Sender : TObject);
Begin
If fOnActivateWurdeSchonDurchlaufen Then exit; // fOnActivate... ist ein privates Feld der TMyForm-Klasse
InitialisiereEinmaligIrgendwelcheSachen();
fOnActivateWurdeSchonDurchlaufen := True;
End;
So, OnActivate wird zwar mehrfach aufgerufen, aber InitialisiereEinmaligIrgendwelcheSachen() wird maximal 1x aufgerufen.