Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

Creare un custom CollectionEditor

Quando creiamo CustomControls, spesso esponiamo proprietà che ritornano collection di items. Visual Studio è abbastanza furbo da generare un Designer opportuno per creare le istanze degli oggetti contenuti a design-time, tramite l'UITypeEditor CollectionEditor.

L'abbiamo usata migliaia di volte, si fa click su "Add" e, detto T il tipo base di dati esposto dalla collection, automaticamente una nuova istanza di T viene aggiunta ad essa. Bene, ma se T fosse un tipo astratto? o se volessimo popolare tale collection anche con tipi derivati da T? come farlo a design time? Nulla di più semplice! Basta creare un custom UITypeEditor che derivi da CollectionEditor ed eseguire l'override del metodo CreateNewItemTypes restituendo un array di Type che vogliamo supportare:

internal class MyCustomCollectionEditor: CollectionEditor
{
    
public MyCustomCollectionEditor()
        :
base(typeof(MyCustomCollection))
    {
        
/* MyCustomCollection è la custom collection di cui
           stiamo creando un nuovo UITypeEditor */
    
}
    
    
protected override Type[] CreateNewItemTypes()
    {
        
return new Type[] { typeof(ItemType1), typeof(ItemType2),
            
typeof(ItemType3) };
    }
}

Associamo questo nuovo editor alla collection che vogliamo gestire

[Editor(typeof(MyCustomCollectionEditor), typeof(UITypeEditor))]
public class MyCustomCollection: List<ItemBase>

  
// ....more code here....
}

ed il gioco è fatto: ora possiamo scegliere che tipo di item inserire!

powered by IMHO 1.3

Print | posted on venerdì 7 aprile 2006 02:40 | Filed Under [ .Net 2.0 Visual Studio ]

Powered by:
Powered By Subtext Powered By ASP.NET