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

VB.NET Discussion :

custom control avec des images


Sujet :

VB.NET

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut custom control avec des images
    Bonjour,

    je cherche a faire un contrôle customisé à ajouter à ma toolbox.
    Ce controle contient une image et un texte, c'est assez simple.
    Pour le texte pas de problème, ca marche comme il faut, mais je n'arrive pas a afficher d'image.

    Voilà comment j'ai procédé :

    j'ai un projet de type "Class library" qui contient mon controle customisé.
    Dans ce projet j'ai "MonControle.vb" qui est un userControl, et qui contient une picturebox.
    J'ai également un fichier de ressources "images_res2" qui contient mes images.

    Voila le code de mon controle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Imports System.Resources
    Imports System.Reflection
     
    Public Class Pions
     
    Public Enum eType
            image1
            image2
            image3
        End Enum
     
        Private _Type As eType
        Private _Nombre As Integer
        Public Property Type As eType
            Get
                Return _Type
            End Get
            Set(ByVal value As eType)
                _Type = value
                Dim resmgr As New ResourceManager("MyControlNamespace.images_res2", Assembly.GetExecutingAssembly())
                Select Case value
                    Case eType.image1
                        Me.pImage.Image = resmgr.GetObject("image1")
                    Case eType.image2
                        Me.pImage.Image = resmgr.GetObject("image2")
                    Case eType.image3
                        Me.pImage.Image = resmgr.GetObject("image3")
                    Case Else
     
                End Select
            End Set
        End Property
     
        Public Property Nombre As Integer
            Get
                Return _Nombre
            End Get
            Set(ByVal value As Integer)
                _Nombre = value
                tNombre.Text = value
            End Set
        End Property
     
    End Class

    Quand j'essaye d'utiliser ce controle dans un projet winform (je le compile, puis j'ajoute la dll dans ma toolbox), le texte fonctionne bien mais aucune image ne s'affiche quand je change la propriété "Type", sauriez vous me dépanner?

    Merci beaucoup.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    A mon avis tu te prends la tête pour rien à vouloir gérer manuellement le ResourceManager... Utilise plutôt le code généré par Visual Studio pour le fichier resx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            Set(ByVal value As eType)
                _Type = value
                Select Case value
                    Case eType.image1
                        Me.pImage.Image = images_res2.image1
                    Case eType.image2
                        Me.pImage.Image = images_res2.image2
                    Case eType.image3
                        Me.pImage.Image = images_res2.image3
                    Case Else
     
                End Select
            End Set

  3. #3
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut usercontrol avec resources images incorporees
    Bonjour Flamby38,
    est-ce que ce n'est pas du à la maniere de creer le fichier resources en vb.net.
    il faut faire dans le projet usercontrol (dll):
    1/ ajouter nouvel element->general >fichier resources
    -le renommer ensuite en images_res2
    2/ proprietes projets->resources >ajouter un fichier
    -on ajoute image1.jpg,image2.jpg,image3.jpg
    3/dans explorateur de solutions
    proprietes fichier images_res2
    Action de Generer=Ressource incorporée
    Generer.
    4/creer un projet test et referencer ton user conntrol
    5/generer
    il doit apparaitre dans toolbox,tu le depose et ca doi marcher.
    en tout cas j'ai rajouter quelques lignes pour ameliorer l'aspect et l'utilisation du usercontrol
    ci-apres le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    'Projet UserControl
    'Ajoute un TableLayoutPanel a ton UserControl avec 2 lignes
    'postionne :
    '-le TextBox sur la 1ere ligne
    '-le PictureBox sur la 2eme ligne
    'mets:
    '-TableLayoutPanel.dock=fill
    ''ajuste :
    '-les hauteurs des 2 lignes suivant l'aspect desire
    '-ensuite dans TableLayoutPanel mets lignes à redimensionner auto.
    'Tout cela pour garder un aspect homogene au controle
     
    Imports System.Resources
    Imports System.Reflection
    Imports System.Attribute
    Imports System.ComponentModel
     
    Public Class Pions
     
        Public Enum eType
            image1
            image2
            image3
        End Enum
     
        Private _Type As eType
        Private _Nombre As Integer
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            'initialise ton image pour l'utilisateur
            Me._Type = eType.image1
            Me._Nombre = 1
     
            'Met BorderStyle à Fixed3D sinon on ne voit pas les limites de ton controle
            Me.BorderStyle = Windows.Forms.BorderStyle.Fixed3D
        End Sub
        'rend proprietes visible dans inspecteur proprietes
        'petite description apparait dans le bas de l'inspecteur
        <Browsable(True), Description("Choix Images")> _
            Public Property Type() As eType
            Get
                Return _Type
            End Get
            Set(ByVal value As eType)
                _Type = value
     
                Dim resmgr As ResourceManager = New ResourceManager("MyControlNamespace.images_res2", Assembly.GetExecutingAssembly())
                'Dim tt As String = resmgr.GetString("image1")
                Select Case value
                    Case eType.image1
                        Me.pImage.Image = resmgr.GetObject("image1")
                    Case eType.image2
                        Me.pImage.Image = CType(resmgr.GetObject("image2"), Image)
                    Case eType.image3
                        Me.pImage.Image = CType(resmgr.GetObject("image3"), Image)
                    Case Else
     
                End Select
                'rajoute ceci pour que l'image s'adapte a la taille du controle 
                'lors du redimensionement par utilisateur.
                Me.pImage.SizeMode = PictureBoxSizeMode.StretchImage
            End Set
        End Property
     
        <Browsable(True), Description("Nbre Images")> _
        Public Property Nombre() As Integer
            Get
                Return _Nombre
            End Get
            Set(ByVal value As Integer)
                _Nombre = value
                tNombre.Text = value
            End Set
        End Property
     
    End Class
    En tous cas le fichier images_res2.resx peut etre inspecter voici ce que j'ai chez a la fin apres avoir ajoute les images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <data name="image1" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>Resources\image1.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
      </data>
      <data name="image2" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>Resources\image2.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
      </data>
      <data name="image3" type="System.Resources.ResXFileRef, System.Windows.Forms">
        <value>Resources\image3.jpg;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
      </data>
    </root>
    bon code et bonne soiree ...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Merci bien pour vos réponses, je vais tester tout ca voir ce que ca donne.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Un gros merci à tous les deux, le problème est réglé

    Effectivement passer par le ressourcemanager est inutile, et c'est certainement en l'utilisant que j'ai fait des erreurs. Le code de mabrouki m'a également aidé a perfectionner les détails.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/08/2006, 12h14
  2. [HTML]Liste avec des images
    Par GLDavid dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 03/08/2006, 17h14
  3. Probleme de double rolover en CSS avec des images
    Par gandoulfe dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 12/04/2006, 16h24
  4. Liaison avec des images dans une table
    Par ValérieBruxelles dans le forum Access
    Réponses: 5
    Dernier message: 25/11/2005, 14h21

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