J'ai créé une application C # WinForms à l'aide de VS2010. Je suis novice dans la création de contrôles utilisateur, j'ai donc créé un nouveau contrôle utilisateur (dans le cadre du même projet).
Lorsque je reconstruis le projet, le nouveau contrôle apparaît dans la boîte à outils. Et lorsque je déplace le contrôle de la boîte à outils vers un formulaire, l'erreur suivante apparaît.
Échec du chargement de l'élément de la boîte à outils 'TagGroup'. Il sera supprimé de la boîte à outils.
Cela s'est produit la seule autre fois où j'ai créé un contrôle utilisateur. J'ai effectué des recherches sur le Web, mais la plupart des réponses que j'ai trouvées semblaient liées au contrôle exercé dans une assemblée distincte. (Notez que j'ai trouvé beaucoup de questions avec le même problème que moi.)
Quelqu'un peut-il suggérer où je devrais regarder ensuite?
J'ai finalement compris celui-ci.
Le projet sur lequel je travaille utilise deux assemblys de bibliothèques de classes. Bien que celles-ci n'aient rien à voir avec le contrôle dont je parle, j'ai regardé et vu que les deux bibliothèques avaient une cible de plate-forme dans l'onglet Propriétés | Construire définie sur "Tout processeur".
D'autre part, mon application avait ce paramètre défini sur "x64". En modifiant le paramètre de mon application sur "Tout processeur", je peux maintenant placer mes contrôles utilisateur sur mes formulaires.
Allez comprendre...
Mon application doit être en 64 bits. Afin d'utiliser des contrôles utilisateur personnalisés dans le concepteur, je viens d'ajouter un nouveau projet à ma solution. Ce nouveau projet utilise le paramètre "AnyCPU" et contient tous mes contrôles utilisateur.
Ma solution contient les projets suivants:
Fonctionne comme un charme et c'est propre
À propos, il existe un article de support technique Microsoft concernant ce problème.
J'ai eu ce problème aussi, mais la réponse ne pouvait pas me convenir. Mon projet a quelques problèmes, il ne peut cibler que x86 et x64 séparément. En d'autres termes, je ne peux pas utiliser la configuration AnyCPU (c'est parce que je référence différentes bibliothèques pour chaque configuration, car ces bibliothèques ne sont pas compatibles avec AnyCPU).
La solution que j'ai proposée est la suivante: lorsque je dois utiliser le concepteur de formulaire, je modifie le paramètre en x86. Faites le travail, puis réglez de nouveau sur x64 et testez. Le problème se produit uniquement avec le concepteur, mais la solution est générée et fonctionne correctement.
J'ai eu ce problème dans VS2015 et la solution s'est avérée simple.
J'avais créé un contrôle utilisateur en coupant et en collant quelques contrôles existants à partir d'un formulaire (dans le but de les regrouper dans le contrôle personnalisé). Le contrôle personnalisé était correct (aucune erreur de compilation), mais la suppression des contrôles du formulaire existant signifiait que l'application ne compilerait pas. Bien sûr, le fait de ne pas pouvoir ajouter le nouveau contrôle signifiait que je ne pouvais pas mettre à jour le code faisant référence aux contrôles précédents avec le code faisant référence au contrôle personnalisé.
Tout ce que je faisais était du hack and slash (mise en commentaire, création de contrôles temporaires, etc.) pour que toute l'application soit compilée. Après l'avoir compilé, j'ai découvert que je pouvais faire glisser le contrôle personnalisé sur le formulaire (sans l'erreur qui a provoqué cette question). J'ai ensuite dû décocher et débloquer pour que le code fasse correctement référence au nouveau contrôle personnalisé.
Même problème ici. Je suppose que cela est lié au fait que la VS2010 installée sur un système d'exploitation x64 est toujours un programme 32 bits dans le cœur.
Une solution alternative que vous pouvez essayer est simplement d'ouvrir TheFormThisUserControlIsSupposedToBeAddedTo.Designer.cs et d'utiliser du code pour ajouter le contrôle utilisateur. En gros, vous faites le sale boulot que le concepteur est supposé faire.
Ce n'est pas aussi difficile que ça en a l'air, surtout considérant que le fichier contient probablement déjà beaucoup d'exemples de code (par exemple, les boutons que vous avez ajoutés à l'aide de Designer). La seule partie difficile consiste à trouver les bonnes coordonnées dans le formulaire pour placer le contrôle.
Le résultat final est que vous ne pouvez pas voir le contrôle utilisateur dans Desinger, mais ils sont ajoutés lors du débogage/exécution.
Une heure de dépannage confus et fatigant à 3h36 est à nouveau facilement résolue avec un esprit neuf le lendemain!
J'ai corrigé une simple faute d'orthographe dans le nom du fichier du contrôle. Elle correspond donc maintenant au nom de UserControl, nettoyée, reconstruite et bobs le chat de l'oncle étrange. :]
J'ai aussi rencontré ce problème mais la cause était différente. Dans mon cas, un constructeur de composant (formulaire) ou un événement Load a appelé ailleurs une méthode utilisant la réflexion pour rechercher toutes les classes implémentant une interface donnée.
Bien que cela fonctionne bien au moment de l'exécution, il a généré l'exception mentionnée ci-dessus au moment de la conception. (Exception d'initialisation de type avec une exception de type Load comme exception interne).