The following tables list selected tasks that you might need to complete when working with the OpenEdge GUI for .NET and where you can find more information about them.

Visual Designer

The Visual Designer is the tool provided by OpenEdge Architect for building a GUI for .NET application. It opens whenever you create or edit an ABL Form, ABL Dialog, ABL MDI Form, ABL User Control, or ABL Inherited Control object in OpenEdge Architect. Each of these objects is an ABL class that inherits and extends a .NET form or control class. Depending on the object type, Visual Designer allows you to build the class by dragging and dropping components, setting properties, and using wizards, which generates code for the class, and you can switch to code view to add code manually using the OpenEdge Editor. For an introduction to the Visual Designer see, Introducing the OpenEdge Architect Visual Designer. For a series of video tutorials on working with the GUI for .NET in OpenEdge Architect, see OpenEdge Architect Videos: Using Visual Designer and GUI for .NET in OpenEdge Architect.

TaskSummaryInformation Source

Understanding the code generated for an inherited .NET form

Visual Designer automatically generates code when you create a new ABL Form (ABL-derived .NET form). The following information describes some of this generated code.

Manuals:

OpenEdge Architect Online Help:

Video Tutorials:

Adding a ProBindingSource to a form For .NET controls that support data binding using a System.Windows.Forms.BindingSource class, you can bind supported ABL data to these controls by adding a Progress.Data.BindingSource (ProBindingSource) instance to any form that contains instances of the controls. The Visual Designer provides several ways to add a ProBindingSource to a form.

Manuals:

  • Introducing the OpenEdge Architect Visual Designer

Video Tutorials:

Using the assemblies.xml file in development and deployment

Any ABL application that implements a GUI for .NET, or that only references a .NET object type, must have access to an assemblies.xml file that identifies the .NET assemblies defining all .NET objects referenced by the session. OpenEdge Architect automatically creates an assemblies.xml file, which you can update, for any project that references a .NET object.

Manuals:

OpenEdge Architect Online Help:

Understanding inherited controls and user controls Visual Designer allows you to create custom controls for use in designing forms, including ABL-derived .NET controls (ABL Inherited Control) and ABL-derived .NET user controls (ABL User Control). In short, an ABL Inherited Control is an ABL class that inherits and extends a .NET control class; an ABL User Control is an ABL class that inherits and extends the OpenEdge-extended .NET class, Progress.Windows.UserControl., which is a container for other controls.  After creating it, you can add each custom control to the Toolbox, from which you can visually add the control or user control to any ABL-derived form that you create.

Manuals:

OpenEdge Architect Online Help:

Video Tutorials:

Building localized forms

Visual Designer automatically creates a resource (.resx) file to store resources used by a .NET form in a GUI for .NET application.  To localize the form, you must translate the labels for the form stored in the resource file using third-party tools.

Manuals:

OpenEdge Architect Online Help:

Using form and control classes across two or more projects To use form and control classes across two or more projects, you must make the class files available to each project. To share control classes across projects, you can set a sharing option that allows you to use a global Toolbox for all projects accessed with the Visual Designer. You can also copy the same toolbox.xml file among different projects or users to share a common Toolbox definition among specific projects of one or more installations of OpenEdge Architect.

OpenEdge Architect Online Help:

Setting up company standard templates using form inheritance You can set up company standard form templates by creating ABL-derived forms (ABL Form objects in Visual Designer) that include ABL-derived user controls (ABL User Control objects in Visual Designer).

Manuals:

OpenEdge Architect Online Help:

Run time/Deployment

Deployment involves setting localization options and installing files associated witht the .NET objects you reference.

TaskSummaryInformation Source
Localizing an application using startup parameters and the machine culture setting You can localize a GUI for .NET application using a setting of the .NET System.Globalization.CultureInfo class, and you can match other ABL data and display options to this setting using the Internal Code Page (-cpinternal), Date Format (-d), European Numeric Format (-E), and Use OS Locale (-useOsLocale) startup parameters.

Manuals:

Deploying the assemblies.xml file, OpenEdge-installed controls, third-party controls, and your own custom controls When you deploy a GUI for .NET application, you need to locate the assemblies.xml file where OpenEdge can find it and ensure that the assemblies it references are installed appropriately.

Manuals:

Data Binding

OpenEdge provides the .NET Progress.Data.BindingSource (ProBindingSource) class to bind ABL data to .NET user-interface controls that support data binding using the System.Windows.Forms.BindingSource class. Typically, a .NET control supports data binding using a BindingSource class if it has a property of type System.Object (typically named DataSource) to assign the data source object instance, including a ProBindingSource, or it has a property of type ControlBindingsCollection (typically named DataBindings) that you can use to bind data elements from the ProBindingSource to specified properties on the control.  For an overview of data binding in the GUI for .NET, see Binding ABL Data to .NET Controls in GUI for .NET Programming.

TaskSummaryInformation Source
Binding data to lists and individual fields with a ProBindingSource You can bind the individual fields of database or temp-table buffers to field and list controls. Examples of these controls include the Microsoft Label, TextBox, and ComboBox or the Infragistics UltraTextbox, UltraCombo, and UltraListView.

Manuals:

Video Tutorials:

Binding both single-level and hierarchical data to a grid with a ProBindingSource You can bind database tables, temp-tables, queries, and ProDataSets to grid controls. Examples of grid controls include the Microsoft DataGridView and the Infragistics UltraGrid.  You can use multiple DataGridView controls to bind hierarchical data from a ProDataSet, or you can use a single UltraGrid control, which supports multi-level data binding.

Manuals:

Video Tutorials:

Binding data to a tree control You can bind data to tree controls, such as the Microsoft TreeView and Infragistics UltraTree control.  However, the Microsoft TreeView does not support convenient data binding using a ProBindingSource.  Instead, you can create your own ABL data modeling classes and use them as part of an ABL-derived Microsoft TreeView control to bind ABL data to the TreeView.

Manuals:

Video Tutorials:

Binding multiple controls to a single data source You can bind multiple UI controls to a single data source by binding a specified data element to each control using the DataMember or DataBindings property of each control, or by binding the entire data source attached to the ProBindingSource to each control using its DataSource property (if the control has one).

Manuals:

Batching with a ProBindingSource Batching allows you to set up a ProBindingSource to automatically retrieve more data when it has reached the end of its current result set and is being asked to get the next data element. You can set up batching using the ProBindingSource Batch property and OffEnd event.

Manuals:

Sorting data in a control with a ProBindingSource Sorting data in controls can be accomplished in different ways depending on the native support for sorting in the control. For example, the Infragistics UltraGrid can manage its own sorting operations while the Micrsoft DataGrid relies on its data source (in this case, its ProBindingSource) to do the sorting.

Manuals:

Video Tutorials:

Doing CRUD operations with a ProBindingSource The methods, properties, and events of a ProBindingSource support the full range of create, read, update, and delete operations on the records of a database.

Manuals:

Handling events for a ProBindingSource The ProBindingSource extends the System.Windows.Forms.BindingSource class with several additional events.  These events simplify various operations on ABL data that you bind to a .NET control. During data processing, you work with these events, control events, and any events on the data source (such as a ProDataSet) to manage the data for a GUI for .NET.

Manuals:

Events

ABL supports events as members of a class, including .NET events, which you can process using a form of the WAIT-FOR statement.

TaskSummaryInformation Source
Defining and inheriting events in ABL ABL support for class events allows you to both inherit .NET events and implement inherited .NET abstract events.

Manuals:

Subscribing event handlers and publishing a .NET event You can subscribe ABL internal procedures or class methods as handlers for .NET events, depending on their access mode. You can also publish a .NET event if the .NET class that provides the event also provides a .NET method for publishing the event, and you can publish any ABL event that you define to implement a .NET abstract or interface event.

Manuals:

Video Tutorials:

Using the WAIT-FOR statement to display a non-modal MDI, .NET multi-form, or mixed .NET form and ABL window application You can define only a single WAIT-FOR statement to block for .NET events. However, that one WAIT-FOR statement allows you to handle events for any combination of non-modal .NET forms and ABL windows that you display in an application.

Manuals:

Miscellaneous ABL

Much of the support for the GUI for .NET is in how ABL supports access to .NET types.

TaskSummaryInformation Source
Mapping ABL and .NET data types ABL allows you to access most .NET objects as classes in ABL, including .NET array objects. However, you can reference .NET primitive data types only as equivalent ABL primitive data types, which ABL implicitly maps from one to the other. In some cases, you must explicitly indicate the .NET primitive type that corresponds to given ABL primitive type and ABL supports mechanisms to do that. ABL also supports an implicit mapping between one-dimensional .NET array objects and ABL arrays (variables or properties defined with an EXTENT) when you assign between one and the other.

Manuals: