2008-08-14 26 views
28

Si dovrebbe essere in grado di creare una forma generica:Puoi usare moduli generici in C#?

public partial class MyGenericForm<T> : 
    Form where T : class 
{ 
    /* form code */ 
    public List<T> TypedList { get; set; } 
} 

è valido C#, e compila. Tuttavia, il progettista non funzionerà e il modulo genererà un'eccezione di runtime se si dispone di immagini che affermano che non è in grado di trovare la risorsa.

Penso che questo sia dovuto al fatto che il progettista di moduli Windows presuppone che le risorse verranno archiviate con il nome del tipo semplice.

risposta

18

Sì, è possibile! Ecco un post sul blog che ho fatto qualche tempo fa con il trucco:

Designing Generic Forms

Edit: Sembra che si sta già facendo in questo modo. Questo metodo funziona bene, quindi non lo considererei troppo hacky.

+1

E se avessi 3 moduli? Voglio Form3: Form2. Ciò include il parametro di tipo generico + i controlli in Form2. Qualche idea? – mynkow

0

Ho un trucco per aggirare questo, che funziona ma non è l'ideale:

aggiungere una nuova classe al progetto che eredita la forma con la sua semplice nome.

internal class MyGenericForm: 
    MyGenericForm<object> { } 

Ciò significa che, anche se il progettista è ancora sbagliata del tipo semplice atteso (cioè senza <>) si trova ancora.