Is there any way to cancel or abort form creation from within the form’s OnCreate event handler or C++Builder constructor?
Basically, I’d like to be able to call Close() from OnCreate or from the constructor and have it skip showing the form altogether. I have several forms that as part of their initialization may determine that they shouldn’t be shown at all. (I realize that I could split apart this portion of the initialization or add extra checks from the calling form or similar, but if there’s a way to cleanly do all of this from within OnCreate or the constructor, that seems simplest.)
Edit: In response to a few comments, some of the don’t-show-at-all logic is UI logic and not business logic; the form might display a confirmation before showing, or it might use a common dialog box to get input for the form then abort if the user cancels that dialog. (Some of it is business logic and needs to be refactored, but it’s often hard to find the time to refactor everything that needs it.)
You can always call
Releasein theOnCreatehandler, but that will lead to the form quickly appearing and then being closed. Not a very professional thing.So here’s another idea. Let the forms have a public function or property to return whether they are in fact to be shown. Then where you would usually have
you would have
Having said that – any other way of coding this (so you don’t create a form that will be immediately destroyed) is surely better. Especially if you want to maintain a clear separation between UI and business layer it would be much better to have the code that decides whether the form is to be shown outside of the form. Create the form only after you have made the decision.