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
HauptknotenLayoutPanelControl
Layout. Basisknoten für alle ElementeGroupControl
Gruppe für SteuerlementeTabContainerControl
Tab-Container (kann nur Tabs beinhalten)TabControl
Oberster Knoten aller Elemente auf einem TabPartialRefreshGroupControl
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.FormConfigurationGuid)]
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 demToolboxName
angezeigt wird, dient der einfacheren Identifizierung des SteuerelementsId
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.