Comment mettre un UserControl dans la boîte à outils Visual Studio

93

J'ai fait un contrôle utilisateur dans mon projet, et après avoir construit un projet, je dois le mettre dans ma boîte à outils et l'utiliser comme contrôle commun. mais je ne peux pas. le UserControlest dans mon espace de noms de projet, et j'ai essayé Choose Itemdans le menu contextuel, mais je n'ai pas trouvé de moyen de l'ajouter.

Saeed
la source

Réponses:

114

Je suppose que vous utilisez VS2010 (c'est ce que vous avez marqué à la question) J'ai eu des problèmes pour les ajouter automatiquement à la boîte à outils comme dans VS2008 / 2005. Il existe en fait une option pour arrêter le remplissage automatique de la boîte à outils!

Accédez à Outils> Options> Concepteur Windows Forms> Général

En bas de la liste, vous trouverez Toolbox> AutoToolboxPopulate qui, lors d'une nouvelle installation, prend la valeur par défaut False. Définissez-le sur true, puis reconstruisez votre solution.

Hé hop, les contrôles utilisateur de votre solution devraient être automatiquement ajoutés à la boîte à outils. Vous devrez peut-être également recharger la solution.

DaveF
la source
31
Le mot clé ici pour moi était "reconstruire" ... je n'avais pas essayé ça, d'oh! Faire ça seul a réglé ça pour moi.
Danny Beckett
2
Et, j'ai dû rouvrir la solution après la reconstruction
Jim Lahman
1
Dans VS2012, ils ont maintenant ajouté l'indication «La solution actuelle doit être rouverte pour que cela prenne effet» dans la boîte de dialogue des options.
Carlos P
2
@AnatoliiGumennyi Vous devrez suivre les instructions de @ Arseny si le UserControlest en dehors du projet en cours.
Attacktive
2
Remarque: On dirait que dans VS2013, le paramètre Toolbox> AutoToolboxPopulate est désormais défini par défaut sur True lors d'une nouvelle installation.
Curmudgeon
35

Faites un clic droit sur la barre d'outils puis cliquez sur "choisir un élément" dans le menu contextuel. Une boîte de dialogue avec les composants enregistrés apparaît. dans cette boîte de dialogue, cliquez sur "Parcourir" pour sélectionner votre assemblage avec le contrôle utilisateur que vous souhaitez utiliser.

PS. Cet assemblage doit être enregistré avant.

Arseny
la source
17
Pouvez-vous expliquer «inscrit avant»? Je ne pense pas que ce soit nécessaire.
Henk Holterman
25

J'ai trouvé que le contrôle utilisateur doit avoir un constructeur sans paramètre ou il n'apparaîtra pas dans la liste. du moins c'était vrai en vs2005.

Scott
la source
8
Également en vs2012.
colbybhearn
8
Également en vs2013.
Connor McGuinness
6
Aussi en vs2015?
serdar le
5
Oui aussi en vs2015
JRB
5
Ajouter vs2017 à la liste
Ryan
14

Utilisation de VS 2010:

Disons que vous avez un projet Windows.Forms. Vous ajoutez un UserControl (disons MyControl) au projet et vous concevez tout. Vous souhaitez maintenant l'ajouter à votre boîte à outils.

Dès que le projet est généré une fois avec succès, il apparaîtra dans vos composants de structure. Cliquez avec le bouton droit de la souris sur la boîte à outils pour obtenir le menu contextuel, sélectionnez «Choisir les éléments ...» et recherchez le nom de votre contrôle (MyControl) sous l'onglet «Composants .NET Framework».

Avantage par rapport à l'utilisation des DLL: vous pouvez modifier les contrôles dans le même projet que votre formulaire, et le formulaire sera construit avec les nouveaux contrôles. Cependant, le contrôle ne sera disponible que pour ce projet.

Remarque: si le contrôle a des erreurs de génération, résolvez-les avant de passer aux formulaires contenant, ou le concepteur a une crise cardiaque.

pseudo
la source
1
Il peut également être disponible pour d'autres projets si vous importez le .exe dans la boîte à outils.
Sebastian
1
Toute réponse contenant "ou le designer a une crise cardiaque" obtient mon vote!
Joel
J'ai fait la même chose et tout va bien, mais lorsque j'ai déplacé le code dans un autre projet, créé une dll et référencé le fichier dll, le contrôle personnalisé ne s'affiche pas.
Fandi Susanto
6

J'avais de nombreux contrôles d'utilisateurs, mais l'un d'entre eux a refusé de s'afficher dans la boîte à outils , même si j'ai reconstruit la solution et qu'elle a été cochée dans la boîte de dialogue Choisir les éléments ...

Solution:

  1. Depuis l' Explorateur de solutions, j'ai cliqué avec le bouton droit sur le fichier de contrôle utilisateur incriminé et sélectionné Exclure du projet
  2. Reconstruisez la solution
  3. Cliquez avec le bouton droit sur le contrôle utilisateur et sélectionnez Inclure dans le projet (en supposant que l' option Afficher tous les fichiers est activée dans l' Explorateur de solutions )

Notez que cela nécessite également que l' option AutoToolboxPopulate soit activée. Comme le suggère la réponse @DaveF.

Solution alternative: je ne suis pas sûr que cela fonctionne et je n'ai pas pu l'essayer car j'ai déjà résolu mon problème, mais si vous avez décoché le contrôle utilisateur dans la boîte de dialogue Choisir les éléments ... , appuyez sur OK, puis ouvrez-le de nouveau et vérifié le contrôle utilisateur. Cela pourrait également fonctionner.

MoMo
la source
3

Il y a plusieurs façons.

  1. Dans votre projet d'origine, choisissez Fichier | Exporter le modèle,
    puis sélectionnez ItemTemplate et suivez l'assistant.

  2. Déplacez votre UserControl vers une ClassLibrary distincte (et corrigez les espaces de noms, etc.).
    Ajoutez une référence à la bibliothèque de classes à partir des projets qui en ont besoin. Ne vous embêtez pas avec le GAC ou quoi que ce soit, juste le fichier DLL.

Je ne conseillerais pas de mettre un UserControl dans la ToolBox normale, mais cela peut être fait. Voir la réponse de @Arseny

Henk Holterman
la source
Cela semble la meilleure approche. Le seul inconvénient est que vous ne pouvez pas modifier le contrôle visuellement (ou du moins je n'ai pas trouvé comment).
Sebastian
Nevermind, j'ai ajouté le modèle en tant qu'élément et le concepteur montre.
Sebastian
Je suis tout à fait d'accord et je déconseille également fortement de créer un lien vers une DLL si le projet qui contient le UserControl est dans la même solution. Et cela fonctionnera avec une DLL, c'est-à-dire que le UserControl dans le projet de bibliothèque apparaîtra dans n'importe quel projet WinForms faisant référence à la bibliothèque (après une reconstruction, bien sûr ;-)).
Xan-Kun Clark-Davis
2

Dans mon cas, je ne pouvais voir aucun des contrôles dans le projet. Ce n'est qu'en cliquant avec le bouton droit de la souris sur toolBox et en sélectionnant "Afficher tout" que je les ai vus, mais ils ont été désactivés ...

La modification du type de projet de l'application Windows vers ClassLibrary a permis de résoudre le problème.

éphraïm
la source
1

Qustion de base si vous utilisez des génériques dans votre contrôle de base. Si oui:

disons que nous avons le contrôle:

public class MyComboDropDown : ComboDropDownComon<MyType>
{
    public MyComboDropDown() { }
}

MyComboDropDown ne permettra pas d'ouvrir le concepteur dessus et ne sera pas affiché dans Toolbox. Pourquoi? Parce que le contrôle de base n'est pas déjà compilé - lorsque MyComboDropDown est respecté. Vous pouvez modifier ceci:

public class MyComboDropDown : MyComboDropDownBase
{
    public MyComboDropDown() { }
}

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Après la reconstruction et la réinitialisation de la boîte à outils, il devrait être en mesure de voir MyComboDropDown dans le concepteur et également dans la boîte à outils

Andrzej
la source
0

La recompilation a fait l'affaire pour moi!

Lex van Buiten
la source