In vielen Fällen ist es lediglich notwendig, die Auswahlliste anzupassen. Für diesen Fall ist es lediglich notwendig ein neues Steuerelement zu implementieren. Ein Renderer ist dabei nicht notwendig.
Es gibt eine Reihe verschiedener Steuerelemente, die zur Auswahl von Auswahllistenwerte dienen und entsprechend erweitert werden können.
- Combobox
EnumComboboxControl
- Tokenbox
EnumTokenboxControl
- Radiobuttons
EnumRadioButtonListControl
- Checkboxen
EnumCheckboxListControl
- Listbox
EnumListboxControl
- Phasen
EnumPhasesControl
Um die Auswahlliste programmatisch zu definieren, wird zuerst das entsprechende Steuerelement abgeleitet und ein eigenes Steuerelement geschaffen.
[Serializable]
[Toolbox(EnumConfigurationType.FormConfigurationGuid)]
public class MyCombobox : EnumComboboxControl
{
public MyCombobox()
{
ToolboxName = "[INSERT TRANSLATION GUID]";
ControlInitName = "MyCombobox";
ToolboxGroupName = "[INSERT TRANSLATION GUID]";
Icon = "[INSERT ICON NAME]";
Id = new Guid("[INSERT UNIQUE GUID]");
Caption = "[INSERT TRANSLATION GUID]";
DesignerHintText = "[INSERT TRANSLATION GUID]";
}
}
Damit würde das neue Steuerelement sich exakt genauso verhalten wie das Original. Um die Auswahlliste zu beeinflussen, muss das Property DataProviderProperties
gesetzt werden. In diesem Beispiel wird die Auswahlliste fest mit einer eignen Auswahlliste verbunden, in dem der Datenprovider für Auswahllistenwerte fest auf die eigene gesetzt wird.
DataProviderProperties = new CDPEnumValuesProperties
{
MasterGuid = EnumMyEnum.MasterGuid,
};
Die Standard Datenprovider für Auswahllistenwerte CDPEnumValues
kann mit Hilfe seiner Eigenschaften CDPEnumValuesProperties
modifiziert werden. Dazu stehen folgende Eigenschaften zur Verfügung.
DisplayIcon
Soll das Icon angezeigt werden.ActiveState
Berücksichtigung das AktivstatusIncludeNonReadable
Anzeige auch der Werte, die der Benutzer normalerweise nicht lesen kann.OnlyTheseValues
Liste von Werten, die angezeigt werden sollen.
Ist dies nicht ausreichend muss der Datenprovider CDPEnumValues
und die Eigenschaftenklasse CDPEnumValuesProperties
entsprechend erweitert werden. In diesem Beispiel wird die Auswahlliste fest belegt und die OwnProperty
der eigenen Auswahlliste, muss einen bestimmten Wert haben.
public class CDPMyEnumValuesProperties : CDPEnumValuesProperties
{
public string OwnPropertyEqual { get; set; }
public CDPMyEnumValuesProperties() : base()
{
MasterGuid = EnumMyEnum.MasterGuid;
DataProviderTypeFullName = typeof(CDPMyEnumValues).FullName;
}
}
public class CDPMyEnumValues : CDPEnumValues
{
public override IEnumerable<ValueEnum> AddWhere(IEnumerable<ValueEnum> list)
{
IEnumerable<EnumMyEnum> returnList = base.AddWhere(list).Cast<EnumMyEnum>();
if (Properties is CDPMyEnumValuesProperties prop)
returnList = returnList.Where(ff => ff.OwnProperty == prop.OwnPropertyEqual);
return returnList;
}
}
Bei der Zuweisung muss nun der eigene Datenprovider angegeben werden.
DataProviderProperties = new CDPMyEnumValuesProperties
{
OwnPropertyEqual = "Wert",
};