(Windows only; GUI for .NET only)
Lets you create the following types of .NET forms in an ABL session (that co-exist with traditional ABL windows and dialog boxes):
The following example shows a simple ABL class that inherits from Progress.Windows.Form create a non-modal form with two buttons that looks behaves like a dialog box, except that it is non-modal:
USING System.Windows.Forms.* FROM ASSEMBLY. CLASS DemoForm INHERITS Progress.Windows.Form: /* Variables for buttons on the form */ DEFINE PRIVATE VARIABLE OkBtn AS Button. DEFINE PRIVATE VARIABLE CancelBtn AS Button. CONSTRUCTOR DemoForm ( ): InitializeComponent( ). END CONSTRUCTOR. /* Event handlers for buttons on the form */ METHOD PUBLIC VOID okButton_Click ( sender AS System.Object, e AS System.EventArgs ): THIS-OBJECT:DialogResult = DialogResult:Ok. THIS-OBJECT:Close ( ). END METHOD. METHOD PRIVATE VOID cancelButton_Click ( sender AS System.Object, e AS System.EventArgs ): THIS-OBJECT:DialogResult = DialogResult:Cancel. THIS-OBJECT:Close ( ). END METHOD. /* Display and wait for this non-modal form to close. The caller blocks at a call to this method */ METHOD PUBLIC VOID Wait ( ): WAIT-FOR Application:Run ( THIS-OBJECT ). END METHOD. METHOD PRIVATE VOID InitializeComponent ( ): /* Instantiate button classes */ OkBtn = NEW Button ( ). CancelBtn = NEW Button ( ). /* Initialize the form and buttons */ THIS-OBJECT:Text = "<form title>". OkBtn:Text = "OK". CancelBtn:Text = "Cancel". OkBtn:DialogResult = DialogResult:OK. CancelBtn:DialogResult = DialogResult:Cancel. /* Set the size and location of the form and buttons */ THIS-OBJECT:Size = NEW System.Drawing.Size( 300, 300 ). OkBtn:Size = NEW System.Drawing.Size( 75, 23 ). OkBtn:Location = NEW System.Drawing.Point( 121, 231 ). OkBtn:Anchor = CAST( Progress.Util.EnumHelper:Or (AnchorStyles:Bottom, AnchorStyles:Right ), AnchorStyles). CancelBtn:Size = NEW System.Drawing.Size( 75, 23 ). CancelBtn:Location = NEW System.Drawing.Point( 205, 231 ). CancelBtn:Anchor = CAST( Progress.Util.EnumHelper:Or (AnchorStyles:Bottom, AnchorStyles:Right ), AnchorStyles ). /* Subscribe to events */ OkBtn:Click:Subscribe( okButton_Click ). CancelBtn:Click:Subscribe( cancelButton_Click ). /* Add buttons to the form */ THIS-OBJECT:Controls:Add( OkBtn ). THIS-OBJECT:Controls:Add( CancelBtn ). END METHOD. END CLASS. |
To instantiate DemoForm and display the non-modal form, you can run a procedure that contains the following code:
DEFINE VARIABLE DisplayFormDemo AS CLASS DemoForm. DisplayFormDemo = NEW DemoForm( ). DisplayFormDemo:Wait( ). |
For more examples, see the chapter on creating and using forms and controls in OpenEdge Development: GUI for .NET Programming.
Execution resumes after the specified form is closed.
For information on the .NET ShowDialog( ) method inherited from the System.Windows.Forms.Form class, refer to the .NET Framework class library.
This statement will also display any additional non-modal forms that you have previously prepared by setting their Visible property to TRUE and invoking their .NET Show( ) method. After the specified form is closed, any additional non-modal forms currently displayed are also closed and execution resumes.
If you do not specify a form, the WAIT-FOR statement displays and blocks for input on any non-modal forms that have been previously prepared by setting their Visible property to TRUE and invoking their .NET Show( ) method. In this case, all non-modal forms currently displayed can be closed and execution can resume only after the application invokes the Application:Exit( ) method.
For information on the .NET Show( ) and Application:Run( ) methods inherited from the System.Windows.Forms.Form class, refer to the .NET Framework class library.