Generische List<> und Visual Studio Designer

Hola allerseits,

Es geht um VS 2005

ich habe eine Klasse, die von ComboBox abgeleitet ist. Die ObjectsCollection „Items“ wird ja mit einem String Editor im Designer angezeigt, die man dann bearbeiten kann. Wenn ich nun eine List oder List in die Klasse packe, kann ich die mir im Designer zwar sogar ansehen und Werte einfügen, jedoch werden diese im Designer-Code nicht eingefügt, sprich, nicht erzeugt.
Wenn ich das ganze mit Boolean[] oder Int32[] Arrays versuche, klappt es wiederum, die Werte bleiben erhalten und sind im DesignerCode vorhanden.
Weiß jemand, mit welcher Interface Implementierung oder welchem Attribut ich den VS Designer dazu bekomme, Werte für die generischen Listen zu erzeugen?

Danke!

Also, ich habe inzwischen selbst etwas herausgefunden. Mit generischen Listen klappt es offenbar mit Hausmitteln nicht. VS2005 verwendet für Arrays jedoch einen eigenen Designer, der sich der Einfachheit halber auch ArrayEditor nennt und in System.ComponentModel.Design zu finden ist.

Der Knackpunkt für mich war, aus List eine eigene Collection zu definieren:

// kapselt eine List
public class iComboBoxItemCollection : IList, ICollection, IEnumerable
{...}

Die entsprechenden Eigenschaften und Methoden der Interfaces sind schnell implementiert.
Nun braucht man für diese Collection einen eigenen Designer, der sich vom Standard CollectionEditor ableitet:

 public class iComboItemCollectionEditor : System.ComponentModel.Design.CollectionEditor
 {
 public iComboItemCollectionEditor(Type type)
 : base(type)
 {
 }

 protected override bool CanSelectMultipleInstances()
 {
 return false;
 }
 protected override Type CreateCollectionItemType()
 {
 return Type.GetType("Interlook.Utils.iComboBoxItem");
 }
 protected override object[] GetItems(object editValue)
 {
 if (editValue is iComboBoxItemCollection)
 {
 iComboBoxItemCollection source = (iComboBoxItemCollection)editValue;
 object[] result = new object[source.Count];
 for (int i = 0; i ((source.Text!=null) && (source.Text.Length \> 0)) ? source.Text : "leer";
 return result;
 }
 }

Man muss dabei einen Verweis auf die System.Design.dll zum Projekt hinzufügen.
Jetzt ist nur noch wichtig, dass man die iComboBoxItemCollection Klasse (s.o.) mit folgendem Attribut definiert:

[EditorAttribute(typeof(Interlook.Utils.iComboItemCollectionEditor),
 typeof(System.Drawing.Design.UITypeEditor))]

Dann klappt es im Designer. Vielleicht hilft das ja jemandem, der mal ein ähnliches Problem haben sollte