7
votes

Avoir mon usercontrol a sa propre icône sur la boîte à outils

J'ai fait un contrôle qui hérite directement de ErrorProvider. Je pensais que l'application de l'attribut ToolboxBitmap serait suffisante pour obtenir mon contrôle d'avoir la même icône sur la boîte à outils, car le contrôle d'origine n'a pas. C'est étrange, comme si j'ajoute le contrôle à la forme, il apparaîtra tout comme il le devrait, mais cela ne change pas l'icône de la boîte à outils. Qu'est-ce que j'oublie ici? J'ai déjà redémarré Visual Studio et conserve ce comportement. XXX


4 commentaires

Just FYI: Ces types de commandes sont des contrôles personnalisés Web (WCC) et non des contrôles utilisateur Web (WUC). Les WUCS sont des fichiers ASCX qui sont utilisés dans une largeur de projet Web, WCC sont largement utilisés ... Donc, dans votre cas, vous devriez écrire WCC dans votre question - juste pour ne pas confondre les autres.


Je ne sais pas de quoi tu parles. Ceci est System.Windows.Forms.ErrorProvider.


Si vous fournissez un chemin "codé" sur le bitmap (ToolboxBitmap ("c: \\ my.bmp") indique-t-il toujours le bitmap par défaut?


Oui, exactement le même comportement. Cela fonctionne sur la commande sur la forme réelle mais pas dans la boîte à outils.


4 Réponses :


2
votes

Est-ce dans le même projet? Ou une dll vous référencez?

Vous n'obtenez que des icônes appropriées lors de la référence d'une DLL fixe. Essayez de construire une DLL de contrôle et de le référencer.


1 commentaires

Ah. C'est dans un autre projet, dans la même solution. Donc, il n'y a pas de travail?



5
votes

Dans Visual Studio 2008, l'icône spécifiée par ToolBoxBATMAP n'est pas ajoutée à la boîte à outils pour l'un des composants de la solution actuelle pour des raisons de performances. L'icône «engrenage» standard est utilisée. Si vous ajoutez manuellement votre assembly via la boîte à outils ... Ajouter des éléments ... boîte de dialogue, l'icône personnalisée affichera le comportement que vous rencontrez. De plus, lorsque vous faites glisser ERRORPROVIDEREX sur un formulaire, l'icône que vous avez spécifiée sera utilisée, ce qui est à nouveau le comportement que vous avez noté dans un commentaire.

Remarque, dans votre cas, vous utilisez typeof (ErrorProvider) de sorte que vous n'aurez donc pas les problèmes normaux d'utiliser un bitmap personnalisé.

(Ce comportement peut également être vrai pour Visual Studio 2005. Visual Studio 2003 nous a gâtés en affichant l'icône.) (Personnellement, je n'aime personnellement pas ce nouveau comportement. Je suis prêt à attendre un deuxième ou deux deux pour l'IDE Récupérez l'icône pour tous les contrôles et composants de la solution. Je me demande s'il y a un bidouillage de registre pour montrer les icônes.)


2 commentaires

C'est toujours le comportement actuel à partir de VS 2010. Aucun piratage de registre que je sais d'avoir émergé.


Toujours la même chose dans vs 2013.



1
votes

Donc, il y a un travail autour. En supposant que votre UserControl soit dans le projet «MyControl», ajoutez une référence à elle-même. C'est-à-dire que le projet de référence MyControl dans le projet MyControl, comme vous le feriez dans un autre projet. Ensuite, l'icône sera affichée dans la boîte à outils de ce projet MyControl.


0 commentaires

0
votes

Le moyen le plus simple de s'assurer qu'une icône de barre d'outils apparaît consiste à créer un fichier BMP 16x16, placez-le dans votre dossier de projet de votre contrôle, puis définissez-la en tant que ressource intégrée.

suivons un exemple relativement simplement: supposons que vous ayez un composant appelé myCompany.comPonents.MyControl . Créez un bitmap 16x16 un enregistrez-le à la racine du dossier de projet MyCompany.Components.MyControl comme myControl.bmp . Cliquez ensuite avec le bouton droit de la souris sur le fichier MyControl.bmp et sélectionnez Propriétés> Build Action> Ressource intégrée . À ce stade, vous avez une étape de plus: ajoutez l'attribut ToolboxBitmap au-dessus de votre définition de classe (si vous utilisez des classes partielles, je place l'attribut dans le fichier de contrôle principal de la commande - non dans le fichier de concepteur.cs). Pour ce faire, utilisez cette syntaxe: xxx

soit absolument sûr que:

  • L'espace de noms de votre classe de projet MyControl correspond à la structure de dossiers pour laquelle votre projet apparaît dans la solution.
  • peut sembler évident, mais assurez-vous que vous avez cité le nom correct pour votre fichier BMP.

    Votre bitmap doit apparaître chaque fois que votre commande est ajoutée à une boîte à outils, qu'elle soit ajoutée manuellement ou de manière programmée.


0 commentaires