Eine Klasse dient der visuellen Definition des Steuerelements im Designer. Diese Klasse enthält Informationen darüber, welches Symbol vor welchem textuellen Namen des Elements in der linken Spalte angezeigt wird. Des Weiteren wird hier festgelegt, in welcher Gruppe von Elementen – beispielsweise „Auswahlelemente“ oder „Relationselemente“ – das Steuerelement angezeigt werden soll und welche möglichen Einstellungen es in der rechten Spalte des Designers aufweist. Zu guter Letzt gibt es in der C# Klasse des Steuerelements noch die Möglichkeit bestimmte Methoden zu überschreiben, welche die interne Behandlung des Elements in Verbindung mit den generierten Datenmodellen der Maske ändern. Die Klasse des Steuerelements muss mindestens von der Basisklasse BA.Core.Configuration.ControlBase abgeleitet sein, oft macht es aber Sinn sie von der Basisklasse BA.Core.Configuration.Form.Controls.DataControlBase abzuleiten, da diese Basisklasse bereits eine standardisierte Möglichkeit zur Auswahl einer mit dem Steuerelement verbundenen Spalte aus der der Maske zugrundeliegenden Datentabelle bereitstellt.

Zusätzlich muss das Steuerlement die Schnittstelle IDevExFormControl implementieren, damit es von DevExpress in der Form dargestellt werden kann.

In manchen Fällen kann es Sinn machen ein bestehendes Steuerelement als Basis zu verwenden, beispielsweise, wenn man die normale Texteingabe nur leicht abwandeln möchte. In diesem Fall leitet man sein Steuerelement von dem entsprechenden Texteingabesteuerelement ab.

Maskensteuerelemente verwenden ein bestimmtes C# Attribut, welches sie als Steuerelement für Masken kennzeichnet.

[Toolbox(EnumConfigurationType.FormConfigurationGuid)]

Drag & Drop Regel

Bei jedem Steuerelement, welches im Designer zur Konfiguration genutzt werden soll, muss man darauf achten, dass die Drag & Drop Regeln korrekt gesetzt sind. Näheres dazu findet man in dem speziellen Kapitel.

In der Regel werden für Aktionen auf Basis von DataControlBase keine weiteren Regeln benötigt.

Wichtige Klassen zur Definition von Regeln

  • FormConfiguration Hauptknoten
  • LayoutPanelControl Layout. Basisknoten für alle Elemente
  • GroupControl Gruppe für Steuerlemente
  • TabContainerControl Tab-Container (kann nur Tabs beinhalten)
  • TabControl Oberster Knoten aller Elemente auf einem Tab
  • PartialRefreshGroupControl Aktualisierungsgruppe

Beispiel

Die Repräsentation des Maskensteuerelements im Beispiel ist relativ einfach. Neben der Attribut Angabe, was diese Klasse eigentlich zu sagen hat, gibt es nur noch den Konstruktor, über den bestimmte Eigenschaften des Elements gesetzt werden.
Bitte wählen Sie für ein eigenes Steuerelement im Rahmen eines Projektes, einen entsprechend passenden Namespace und achten Sie darauf, dass jedes Steuerelement eine eindeutige ID besitzen muss.

namespace BA.Core.Configuration.Form.Controls
{
   [Serializable]
   [Toolbox(EnumConfigurationType.AttributeValues.FormConfiguration)]
   public class ValueAndAliasControl : DataControlBase, IDevExFormControl
   {
       [BARequired]
       [PropertiesGroup("Spezielle Einstellungen")]
       [HelpText("Geben Sie das Trennzeichen zwischen Wert und Alias an.")]
       [StringLength(1)]
       [DisplayName("Trennzeichen")]
       public String Delimiter { get; set; } = "|";

       public ValueAndAliasControl()
       {
           ToolboxName = "[INSERT TRANSLATION GUID]";
           ControlInitName = "ValueAndAlias";
           ToolboxGroupName = "[INSERT TRANSLATION GUID]";
           Icon = Constants.Icons.Designer.Form.TextEdit;
           Id = new Guid("[INSERT UNIQUE GUID]");
           Caption = "[INSERT TRANSLATION GUID]";
           HasErrors = false;
           DesignerHintText = "[INSERT TRANSLATION GUID]";
       }

       protected override Type[] GetTypesOfOrmFieldName(ConfigurationBase configuration)
       {
           return new[] { typeof(OrmTextField) }; ;
       }
   }
}

Erläuterung

Die Klasse kann eigene C#-Properties beinhalten, die in der rechten Spalte des Designers als bearbeitbare Eigenschaft angezeigt werden. Die zu diesem Property angewendeten Attribute steuern bestimmte Eigenschaften des Properties. In diesem Fall beispielsweise muss ein Wert angegeben werden ([BARequired]) und der eingegebene Wert darf nur maximal ein Zeichen lang sein ([StringLength(1)]). Die Eigenschaft erscheint im Designer in einer eigenen Gruppe namens „Spezielle Einstellungen“, es gibt eine Beschriftung „Trennzeichen“ und eine Feldhilfe (HelpText). Diese letzten drei Attribute sind übersetzbar, indem man hier Guids von übersetzten Werten angibt.

Die Klasse des Steuerelements muss als serialisier bar gekennzeichnet sein. Das Toolbox-Attribut bestimmt, dass diese Klasse als Steuerelement für Masken gedacht ist. Die Klasse erbt von DataControlBase, das bedeutet, sie beinhaltet automatisch ein Eigenschaftsfeld, in dem Benutzer eine Spalte der zugrundeliegenden Datentabelle auswählen können.

Im Konstruktor dieser kleinen Klasse werden verschiedene Eigenschaften gesetzt.

  • ToolboxName Name des Steuerelements, wie es im Designer in der linken Spalte angezeigt wird. Dieser Wert ist ein übersetzter Wert, daher wird hier nur die GUID der Übersetzung eingetragen.
  • ControlInitName Interner Name des Controls, welcher nach Bedarf automatisch mit einer generierten Nummer ergänzt wird.
  • ToolboxGroupName Name der Gruppe, in welcher das Steuerelement in der linken Spalte des Designers angezeigt wird (übersetzter Wert).
  • Icon Symbol, welches neben dem ToolboxName angezeigt wird, dient der einfacheren Identifizierung des Steuerelements
  • Id Eindeutige ID des Steuerelements (GUID), muss in jedem Fall neu generiert werden (!)
  • Caption Die Standardbeschriftung des Steuerelements, Vorbelegung des entsprechenden Feldes bei den Eigenschaften eines in die Maske gezogenen Elements (rechte Spalte, übersetzter Wert).
  • HasErrors Definiert, ob dieses Steuerelement zunächst im Fehlerzustand sein sollte (optional)
  • DesignerHintText Beschreibung des Steuerelements, welche im Browser Tooltip erscheint, wenn man mit dem Mauszeiger einige Zeit über dem Element in der linken Spalte des Designers stehen bleibt (übersetzter Wert).

In der überladenen Methode GetTypesOfOrmFieldName definiert man die Datentypen der Felder aus der Datentabelle, die zur Auswahl stehen. Mit OrmTextField definiert man die Textfelder. Im Packet BA.Core.Configuration.OrmEntityBase.EntityFields findet man die möglichen Datentypen.