From event order perspective you now know initially what runs is:
Load
Init
Show
Activate
LISA
Also, activate is repeated every time the form is getting focus. Therefore anything you only want to be done once better goes into init, not activate.
There are good reasons to put things into the Activate event as the best moment, but Init is not, as one would expect, too early. It's not running first. First, all control Inits are running, so in Form.Init you already have access to all form controls, they're yet not shown, but already there.
It's a good idea to extend the event model in the way you can: Let the Form.Init call a user-defined Form.reinit method, that'll then also only run once, but you could rerun things, whenever you want to trigger a form reinitialization, and that could skip things, which only should run once, that you keep in init.
Likewise, you may define a Form.Firstactivate() and call that from Form.Activate(). Add a form property Form.isactivated initially false and then only call Thisform.Firstactivate() if that's still false and set it true.
Such things give you more control. You can't make any user-defined method an event, but calling them from events you make it a two-part event, of which you may run one part whenever you want, not only in that event. Another good example is a user-defined ControlChange() method you let be called from both ProgrammaticChange and InteractiveChange, for things, that should happen in both cases. You don't want to repeat yourself.
Bye, Olaf.
Olaf Doschke Software Engineering