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 :

Alimenter un picturebox à partir d'une imagelist [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Femme Profil pro
    Technicienne Informatique
    Inscrit en
    Février 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicienne Informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2015
    Messages : 33
    Points : 14
    Points
    14
    Par défaut Alimenter un picturebox à partir d'une imagelist
    Bonjour,

    je débute en programmation VB .NET et j'aurais besoin d'aide pour alimenter un picturebox.

    J'explique mon problème :

    J'ai un formulaire qui contient un treeview, le treeview est alimenter à partir d'une base de donnée ( Pour l'exemple on va utiliser la table OPTION)
    Dans ma table chaque option a les critères suivants ( Nom, couleur texte, image icone, image picturebox)

    Pour alimenter mon treeview il récupère bien les informations pour chaque enregistrements contenus dans ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    node.text = OPT_nom
    node.ForeColor = ColorTranslator.FromHtml(Opt.OPT_COULEUR)
    node.ImageKey = Opt.OPT_ICONE
    node.SelectedImageKey = Opt.OPT_ICONE

    Par contre lorsque je veux qu'il récupère l'imageKey de l'image à afficher dans le picturebox en fonction du noeud du treeview sélectionné je sèche.

    J'ai essayé les codes suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PictureBox1.Image = Opt.OPT_IMAGE
    qui me renvois une erreur "Impossible de convertir une valeur de type 'String' en 'Image'."

    J'ai aussi essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim imageoption As Image
    imageoption = Image.FromFile(Application.StartupPath + opt.OPT_IMAGE)
    PictureBox1.Image = imageoption
    Mais là il ne me trouve pas mon image System.IO.FileNotFoundException car il va le chercher dans le dossier qui contient ma solution.

    Merci de votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Pour t'aider, il faudrait que tu indiques ce que contient Opt.OPT_IMAGE.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Technicienne Informatique
    Inscrit en
    Février 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicienne Informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2015
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    OPT_IMAGE contient l'image key de l'image dans l'imagelist.

    J'ai réussi à afficher l'image sauf qu'avec ce code l'index ne correspond pas à mon OPT_ID auquel est rattaché l'image à afficher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    If TreeView1.SelectedNode IsNot Nothing Then
     
                Dim opt As Options = New Options(TreeView1.SelectedNode.Index)
                PictureBox1.Image = ImageList_Services.Images(opt.OPT_IMAGE)
     
            End If
    Je pense qu'il faudrait que je fasse le lien entre le text du noeud sélectionné qui correspond à un numéro (OPT_ID) ce qui me permettrait d'afficher la bonne image.

    Je ne sais pas si mon explication est suffisamment claire.

    Merci

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Attention à ne pas tout mélanger. J'ai un peu l'impression que tu testes des choses en espérant que ça fonctionne :

    TreeView1.SelectedNode.Index correspond à l'index du node sélectionné dans le treeview. Je ne sais pas à quoi correspond le paramètres attendu par le constructeur de ta classe Options mais je doute que cela soit ça.

    Dans la plupart des Controls en winform, il existe une propriété Tag de type Object. Cette propriété permet de stocker tout et n'importe quoi. Elle peut être utile parfois.
    L'idée sera donc au moment de la construction du Treeview, d'affecter à chaque TreeNode crée l'objet Options lui correspondant en l'affectant à sa propriété Tag :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    node.text = OPT_nom
    node.ForeColor = ColorTranslator.FromHtml(Opt.OPT_COULEUR)
    node.ImageKey = Opt.OPT_ICONE
    node.SelectedImageKey = Opt.OPT_ICONE
    node.Tag = opt
    Par la suite, lors de la sélection d'un TreeNode, tu pourras récupérer l'instance Options correspondant à ce TreeNode en lisant sa propriété Tag. Il faudra effectuer un transtypage de Object vers Options.
    En VB.net de mémoire ce doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    opt = Ctype(TreeView1.SelectedNode.Tag, Options)
    PictureBox1.Image = ImageList_Services.Images(opt.OPT_IMAGE)
    Petite note en passant : Evite d'utiliser les noms automatiques pour les controls. Renomme les car une application avec des Label1, Label2, TreeView1 et autres Combobox1, ce n'est pas très parlant.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Technicienne Informatique
    Inscrit en
    Février 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicienne Informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2015
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Il est certain que je teste un peu car j'ai aucune formation en VB .NET et je dois me débrouiller sans donc pas évident pour moi.



    J'ai renommé mes controls mais là c'était juste pour l'exemple et faire mes tests.

    Actuellement au chargement de mon formulaire je récupère dans ma base les informations qui vont me permettre d'alimenter mon treeview

    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
     
    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim nodefamille As TreeNode
            Dim nodeoption As TreeNode
     
            For Each Fam As Famille In Famille.Get_Objets_All
     
                'création nouvel objet en mémoire
                nodefamille = New TreeNode()
     
                'création de l'objet nodefamille
                nodefamille.Text = Fam.FAM_NOM
     
     
                For Each opt As Options In Options.Get_Objets_Filtre_Par_Famille(Fam)
     
                    nodeoption = New TreeNode()
     
                    nodeoption.Text = opt.Nom
     
                    'ajout de la propriété Tag
     
                    nodeoption.Tag = opt
     
                    'création du noeud enfant
                    nodefamille.Nodes.Add(nodeoption)
     
     
                Next
     
                nodefamille.ForeColor = ColorTranslator.FromHtml(Fam.FAM_COULEUR)
                nodefamille.ImageKey = Fam.FAM_ICONE
                nodefamille.SelectedImageKey = Fam.FAM_ICONE
                nodefamille.Tag = Fam
     
                'création du noeud parent
                TreeView1.Nodes.Add(nodefamille)
     
            Next
        End Sub
    Ensuite pour afficher l'image qui correspond au noeud sélectionné j'avais donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
    If TreeView1.SelectedNode IsNot Nothing Then
     
                Dim opt As Options = New Options(TreeView1.SelectedNode.Index)
                PictureBox1.Image = ImageList_Services.Images(opt.OPT_IMAGE)
     
            End If
    End Sub

    Du coup comme j'ai 2 niveaux dans mon treeview nœuds parents / nœuds enfants je pense qu'il faut que je spécifie également que ma procédure s'applique que lorsque c'est les nœuds enfants qui sont sélectionnés pour ensuite utiliser la propriété tag ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    opt = Ctype(TreeView1.SelectedNode.Tag, Options)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Donc tu utilises déjà la propriété Tag. Il ne faut pas que tu crées une nouvelle instance de Options lorsque tu sélectionnes un TreeNode, il faut que tu relises le Tag.
    Tu peux effectivement tester le niveau de ton TreeNode mais cela limitera la possibilité de faire évoluer la structure de ton TreeView (pas très propre). Tu peux aussi tester le type contenu par le Tag :
    Toujours de mémoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeOf Tag Is Options

  7. #7
    Membre à l'essai
    Femme Profil pro
    Technicienne Informatique
    Inscrit en
    Février 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Technicienne Informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2015
    Messages : 33
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    J'ai réussi à faire ce que je souhaitais.

    Pour simplifier les choses j'ai affecté la propriété tag uniquement au nœud enfant (nodeoption).

    Ce qui m'évite ensuite lors de la sélection de mes nœuds de faire un contrôle sur le contenu du tag et j'ai donc bien pour chaque nœud enfant sélectionné l'image affecté qui apparait dans le picturebox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    If TreeView1.SelectedNode IsNot Nothing Then
     
                Dim opt = New Options(TreeView1.SelectedNode.Tag)
     
                PictureBox1.Image = ImageList_Services.Images(opt.OPT_IMAGE)
     
    End If
    Merci pour l'aide

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 03/03/2009, 09h20
  2. Alimentation table Oracle à partir d'une interface Access
    Par ouinih dans le forum Import/Export
    Réponses: 5
    Dernier message: 09/02/2009, 09h33
  3. [AJAX] Alimenter un input à partir d'une liste
    Par bosserieux dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/02/2008, 15h10
  4. Réponses: 2
    Dernier message: 02/03/2007, 14h42
  5. [VB6] Récupérer les images à partir d'une ImageList
    Par mbzhackers dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/05/2006, 15h46

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