Controls
PPJ supplies SAL-compatible controls for the supported UI targets, generally using the Sal prefix. The table below describes desktop base controls; web equivalents use Wisej.NET and can have different capabilities.
In the table below you can find the list of all the supported equivalent controls:
| Control Type | Class name in the PPJ Framework | Base .NET control |
|---|---|---|
| Data Field | SalDataField | TextBox |
| Multiline Field | SalMultilineField | TextBox |
| Combo Box | SalComboBox | ComboBox |
| List Box | SalListBox | ListBox |
| Check Box | SalCheckBox | CheckBox |
| Radio Button | SalRadioButton | RadioButton |
| Option Button | SalOptionButton | CheckBox |
| Pushbutton | SalPushbutton | Button |
| Child Table | SalTableWindow | UserControl |
| Column | SalTableColumn | Control |
| Picture | SalPicture | PictureBox |
| Horizontal Scroll Bar | SalHorizontalScrollBar | HScrollBar |
| Vertical Scroll Bar | SalVerticalScrollBar | VScrollBar |
| Custom Control | SalCustomControl | Control |
| ActiveX Control | SalActiveX | AxHost |
| Line | SalLine | Control |
| Frame | SalFrame | Control |
| Group Box | SalGroupBox | GroupBox |
| Background Text | SalBackgroundText | Label |
| Form Window | SalFormWindow SalRibbonBarForm | Form |
| MDI Window | SalMDIWindow SalRibbonBarMDI | Form |
| Table Window | SalFormTableWindow | Form |
| Dialog Box | SalDialogBox | Form |
PPJ controls build on Windows Forms for desktop solutions and Wisej.NET for web solutions. Some wrap one or more underlying controls rather than directly subclassing the apparent equivalent.
All PPJ controls implement one or more special interfaces used by the PPJ Framework to recognize PPJ controls and correctly redirect specialized functionality.
The table below lists all the control's interfaces:
| Interface | Description |
|---|---|
| ISalWindow | All PPJ controls implement this interface. |
| ISalControl | Only controls that can hold a value implement this interface. Like SalRadioButton, SalDataField, SalVerticalScrollBar. Controls that cannot hold a value, like SalGroupBox or SalLine, do not implement this interface. These controls can also be bound in a SQL statement as bind variables. |
| ISalEditControl | Editable controls implement this interface. |
| ISalListControl | All list controls implement this interface. This is used to normalize also controls like VisOutlineListBox that should respond to SalList* functions as if they were list boxes. |
| ISalPictureControl | Controls that can show an image implement this interface. |
| ISalRadioButton | Controls that behave as a radio button implement this interface. Typically these are SalRadioButton, SalCheckBox and SalOptionButton. |
| ISalAccessory | Accessories controls like SalFormToolBar, SalFormStatusBar and SalFormClientArea implement this interface. |
SAL-compatible actions are exposed through WindowActions in newer releases; MessageActions is the legacy event model. This is where all events that are compatible to the original Team Developer messages are dispatched to as events.
Selecting APIs
Prefer the PPJ API where SAL state, validation, or row context must be preserved. Use the underlying control API deliberately and test that it stays in sync with PPJ. Windows-specific controls such as AxHost are not browser controls. See Message Actions.