Phenomenon:
If the WindowState property of a Window is set to Normal! the order of the Open and Activate events is in this order:
- Open
- Activate
But if the WindowState property is changed to Maximized! then the order of the events is as follows:
-
Open (event starts)
- Activate
- Open (event ends)
Scenario:
WindowState set as Normal!:
- Create a Window with it's WindowState property set as Normal!
- Open the Window using either one of these functions: Open, OpenWithParm, OpenSheet, OpenSheetWithParm.
-
The order of the Open and Activate events gets triggered as follows:
- Open
- Activate
WindowState set as Maximized!:
- Create a Window with it's WindowState property set as Maximized!
- Open the Window using either one of these functions: Open, OpenWithParm, OpenSheet, OpenSheetWithParm.
-
The order of the Open and Activate events gets triggered as follows:
-
Open (event starts)
- Activate
- Open (event ends)
-
Open (event starts)
Cause:
Event trigger order may change from version to version of PowerBuilder. Also, events can trigger multiple times one after another (in example: {Open, Activate, Open} or {Open, Activate, Open, Activate}, etc...)
Workaround:
-
Add an instance variable (ie:
ib_open_completed
). -
Change your activate code to ...
IF ib_open_completed = TRUE THEN
... do your code. -
Add a
ue_postopen
user event &POST
that from theOpen
event. -
In the
ue_postopen
event, set theib_open_completed = TRUE
.
This should enable you to really control the order in which your code is triggered.
Notes: Changing the WindowState property
Do not change the WindowState Property in the Open event of a window opened as a sheet. Doing so might result in duplicate controls on the title bar. You can change the property in other scripts once the window is opened.