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 die virtuelle Methode GetDataProviderProperties() überschrieben werden. Die Basismethode liefert einen Klon von der Eigenschaft DataProviderProperties zurück. Dies ist wichtig, damit spezifische Einstellungen keine Auswirkungen auf alle Instanzen haben.

public override ControlDataProviderPropertiesBase GetDataProviderProperties()
{
    CDPEnumValuesProperties prop = base.GetDataProviderProperties() as CDPEnumValuesProperties;
    prop.DisplayIcon = true;
    return prop;
}

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 Methode GetDataProviderProperties muss nun der eigene Datenprovider zurückgegeben werden.

public override ControlDataProviderPropertiesBase GetDataProviderProperties()
{
    return new CDPMyEnumValuesProperties 
    {
        OwnPropertyEqual = "Wert",
    };
}