IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Problème avec ToolboxBitmap dans usercontrol


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut [C#]Problème avec ToolboxBitmap dans usercontrol
    Bonjour,

    J'ai des soucis avec l'attribut ToolboxBitmap.
    J'essaye d'appliquer une image à mon usercontrol dans la barre d'outils.

    Si je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       [ToolboxBitmap(typeof(Button))]
     public partial class BgIpBox : UserControl
    Aucun soucis, j'ai bien mon usercontrol qui se retrouve affublé du même icone qu'un bouton.

    Par contre, si je précise l'image (16X16 ou 64X64) de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       [ToolboxBitmap(typeof(BgIpBox),"Image.bmp")]
     public partial class BgIpBox : UserControl
    Ca ne fonctionne pas.

    En appliquant strictement les explications dans le tutorial de ce site, ça ne fonctionne pas.

    En utilisant la syntaxe sans le nom de l'image avec le même nom que le contrôle, ça ne fonctionne pas non plus.

    En ajoutant le nom de domaine au nom de l'image, non plus.

    Dans certaines doc trouvées, on indique qu'il suffit d'inclure l'image dans le projet en tant que ressource incorporée et de préciser le nom, puis d'ajouter l'attribut mais ça ne fonctionne pas.

    J'ai trouvé plein d'explications contradictoires, genre préciser "nomdomaine.icon.bmp" ou donner le même nom que le contrôle à l'image, ou au contraire faire suivre de .Icon.bmp, voire de ne pas mettre l'extension, et rien ne fonctionne.

    Chaque exemple trouvé sur le net indique "et voici le résultat, ça marche".
    Alors que ces exemples sont contradictoires et qu'en fait aucun ne semble fonctionner (ou alors, j'ai loupé un épisode).

    J'ai trouvé un post sur le net qui dit que cette fonction est buggée et qu'il y a une espèce de concaténation qui se produit entre le nom de domaine par défaut, le nom de domaine, et le nom du fichier, mais je n'ai pas assez d'explications.

    Quelqu'un a-t-il une méthode claire qui fonctionne réellement?

    Merci d'avance
    Claude

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Bon, je me réponds à moi-même...

    En fait, il s'avère qu'il y a un bug dans l'attribut ToolBoxBitMap.

    Ce bug se manifeste lorsque le nom de l'espace de nommage précisé est différent du nom de l'espace par défaut du projet (ce qui est mon cas, car plusieurs projets contrôles dans la même solution).

    Imaginons une solution "BgControls" qui est destinée à recevoir une série de projets qui sont chacun un usercontrol.

    Imaginons un projet contenu dans cette solution qui s'appelle "BgIpBox", projet contenant un usercontrol à qui on a donné le nom "BgIpBox.cs".

    Si on écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    namespace BgControls
    {
        [ToolboxBitmap(typeof(BgIpBox),"BgIpBox.Icon.bmp")]
        public partial class BgIpBox : UserControl
    Ce qui est ce qui est expliqué dans la plupart des tutoriaux, et bien en fait la ressource qui a être cherchée va être préfixée d'un nom d'espace de nommage qui est sensé être celui du nom d'espace par défaut du projet.

    Autrement dit, le constructeur va rechercher l'image comme suit :

    BgIpBox.BgIpBox.Icon.bmp

    Ce qui n'existe évidemment pas dans le cas présent.

    L'astuce consiste alors à renseigner comme type une classe qui ne sert à rien mais qui est située hors de l'espace de nommage du projet, la ressource sera alors préfixée avec le nom de l'espace de nommage par défaut de la solution, en place de celui par défaut du projet.

    Voici un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    internal class LocaliseRessource
    {
    }
     
    namespace BgControls
    {
        [ToolboxBitmap(typeof(LocaliseRessource),"BgIpBox.Icon.bmp")]
        public partial class BgIpBox : UserControl
        {
    Et là, ça fonctionne, parce que le nom de l'espace de nommage par défaut de la classe "bidon" est celui de la solution, et donc celui qui est précisé explicitement dans le projet, et donc la ressource recherchée devient : "BgControls.BgIpBox.Icon.bmp"

    Pour ceux qui n'ont jamais utilisé d'icone sur un usercontrol, l'image 16X16 (qui s'appelle ici "Icon.bmp") doit être intégrée au projet de la façon suivante :

    1) Clic-droit sur le nom du projet -> Ajouter -> Elément existant (ne pas oublier de sélectionner "Tous les fichiers" comme type d'objet dans la boîte de dialogue qui s'ouvre, c'est évident mais bon...)

    2) Sélectionner le fichier bmp désiré

    3) Dans le projet, cliquer sur le nom du bmp, et dans la fenêtre "propriétés", rubrique "action de génération", sélectionner "Ressource incorporée"

    Voilà, si ça peut servir à quelqu'un, tant mieux.
    Sinon, j'aurais parlé tout seul, mais ce n'est pas bien grave

    A+
    Claude

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci à toi
    Hé ben non, tu n'a pas parlé pour rien, ceci m'à été très utile.
    Les autres tutos sont en effet pas complet puisue il y manque ton astuce ;-)
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec image dans JPanel
    Par littleshrimp dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 14/05/2006, 14h05
  2. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  3. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44
  4. problème avec graphique dans état access
    Par petitmic dans le forum Access
    Réponses: 5
    Dernier message: 07/09/2005, 14h55
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo