.NET hérité (WinForms) Forme - VS concepteur de problème
J'ai plusieurs formulaires dans une application C#. J'utilise Visual Studio 2010 Beta, mais .NET 3.5, C# 3.
J'ai un formulaire de base, appelé FilteredQueryViewForm dans le Shd de l'espace de noms et j'en veux d'autres formes d'hériter elle (parce qu'elle va faire la même chose, mais avec quelques ajouts).
J'ai changé des choses privées, protégées dans le FilteredQueryViewForm classe, de sorte qu'ils sont accessibles à partir de l'formes dérivées. Après cela, j'ai créé un dérivé de la forme et de l'ensemble de la classe de base pour FilteredQueryViewForm.
Le concepteur de la classe dérivée est plaint de l'Shd.FilteredQueryViewForm de ne pas avoir tout les constructeurs... indépendamment du fait qu'il en avait un, avec 3 paramètres. Je pensais que les paramètres peuvent être un problème, j'ai également créé un (public, bien sûr) constructeur sans paramètres, mais ça ne fonctionne toujours pas. Le message d'erreur est le même:
"Constructeur de type 'Shd.FilteredQueryViewForm "pas trouvé".
Et le concepteur de la classe dérivée ne se charge pas.
J'ai essayé de redémarrer vs2010beta, de re-création de l'dérivé de la forme, mais rien ne semble aider. Google n'a pas renvoyé aucun résultat utile pour moi sur ce problème. 🙁
Est-ce un problème de Visual Studio 2010 Beta? Ou suis-je en train de faire quelque chose de mal?
OriginalL'auteur ShdNx | 2009-08-01
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin d'un constructeur sans paramètres qui appelle la méthode InitializeComponent() dans chaque de vos formulaires.
Puis fermez la fenêtre du concepteur, de reconstruire la solution et essayez de rouvrir le designer. Cela devrait fonctionner. La reconstruction de la solution est essentielle.
Le problème, c'est que si vous créez un formulaire qui inheritates du Shd.FilteredQueryViewForm, le concepteur va essayer d'appeler le constructeur du formulaire parent, mais il charge ce formulaire, pas de code, mais il est construit de l'assemblée.
Fonctionne toujours comme un charme 😀
OriginalL'auteur Emiswelt
Je sais que c'est un vieux sujet, mais ces choses se produisent de nouveau, donc je pense que mon contribuer pourrait être utile à l'avenir.
Emiswelt dit "Vous aurez besoin d'un constructeur sans paramètres qui appelle la méthode InitializeComponent() dans chaque de vos formulaires."
Ce n'est pas vraiment nécessaire.
Vous pouvez déclarer un custom constructeur paramétré sur le dérivé de la forme et de l'appel normalement "InitializeComponent" méthode (avec un appel à une coutume constructeur de trop). La chose importante est que votre constructeur appelle "InitializeComponent" (pour les nouveaux contrôles) et de la base de constructeur appelle "InitializeComponent" (hérité de composants).
Cette situation de travail au moment de l'exécution, mais vous ne verrez pas hérité des contrôles sur concepteur Visual Studio.
Pour afficher toutes les commandes au moment de la conception, vous devez uniquement ajouter un simple constructeur sans paramètre de la classe de base.
Par exemple, si votre base est un formulaire avec un bouton et deux boutons radio:
Vous pouvez le voir sur la conception de l'outil et vous pouvez éviter le vide constructeur (sans paramètres) sans problèmes.
La Form2 est maintenant hérité de Form1:
Il n'y a pas de vide constructeur et compiler et fonctionner normalement. Au rutime votre Form2 montrent le même contrôle que Form1.
Mais... vous ne pouvez pas le voir au moment de la conception parce que Visual Studio ne peut pas identifier où "InitializeComponent" méthode et un message d'erreur est affiché.
Pourquoi? Car il devrait y avoir un constructeur sans paramètres quelque part sur les appels à la chaîne.
La solution est une simple modification sur la classe de base:
C'est tout.
OriginalL'auteur tedebus
Je pense que vous vouliez dire que votre Form1.cs[design] n'est pas mise à jour lorsque vous avez ajouté de votre classe de base. J'ai eu le même problème. Curieusement, le programme fonctionnera le mieux quand vous appuyez sur start, et vous verrez que votre classe de base des composants de votre Forme lorsque vous courez, mais pas lorsque vous êtes en mode édition.
Il suffit de double-cliquez sur Form1.cs sur l'explorateur de solutions. Il a travaillé pour moi.
OriginalL'auteur user3832863