2008-11-24 7 views
2

Pourquoi le concepteur ne fonctionne-t-il pas si vous héritez d'un format générique écrit?WindowsForms Designer et GenericForm

Supposons que j'ai le genericform suivant

public class GenericForm<T> : System.Windows.Forms.Form 
{ 
    public T Test 
    { 
     get; 
     set; 
    } 
} 

Quand je vais au concepteur je reçois des erreurs.

La seule solution de contournement que j'ai inventée consiste à utiliser des directives de compilateur.

#if DESIGN  
    public partial class Form1 : System.Windows.Forms.Form 
#else 
    public partial class Form1 : GenericForm<string> 
#endif 

    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 

Répondre

2

Je crois que c'est parce que le concepteur essaie d'instancier le formulaire (ou UserControl) pour l'héberger dans le concepteur. Si vous avez un formulaire générique (ou abstrait), le concepteur ne peut pas l'instancier.

+0

+1. –

2

Le concepteur a toutes sortes de "gotchas" comme celui-ci, malheureusement. Il peut y avoir un bon résumé d'eux quelque part, mais je ne me suis jamais suffisamment mêlé pour le rendre nécessaire.

Cependant, j'ai rencontré ce problème particulier, sauf appliqué à un contrôle utilisateur. La solution que j'ai trouvée (qui est encore un peu hacky, mais d'une manière différente) est de dériver une classe concrète du générique. Dans votre cas, vous feriez:

public class StringForm : GenericForm<string> 

Vous devriez alors être en mesure d'utiliser StringForm dans le concepteur sans aucun problème.

+0

Fait sens. Vous obtenez également le même problème avec les classes abstraites :(. –

+0

Downvoters: s'il vous plaît ajouter un commentaire explicatif –

Questions connexes