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]";
        HasErrors = false;
        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 Aktivstatus
  • IncludeNonReadable 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",
};