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 :

acces aux ressources par une variable?


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut acces aux ressources par une variable?
    Bonjour,
    j'aurais souhaité savoir si il était possible d'accéder aux ressources de mon projet de façon dynamique.
    je m'explique, j'ai actuellement environ 200 png (nommées image001, image002,......) stockées dans les ressources de mon projet et je veux accéder à ces png en fonction d'une variable
    du style My.Ressources."image" & No
    Cela est il possible? Si oui comment?
    merci

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    par reflection oui

    my.resources.gettype.getproperty("image" & n,instance or public).getvalue(my.resources,nothing)
    à caster sur le type voulu

  3. #3
    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
    Pas besoin de la réflexion pour ça... il faut manipuler directement le ResourceManager. Affiche les fichiers cachés dans ton projet (bouton en haut de l'explorateur de solution) et regarde le code du fichier Resources.Designer.vb, tu verras comment le code généré par Visual Studio accède au ResourceManager. Ensuite il suffit de copier le bout qui t'intéresse et de le modifier selon tes besoins...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    merci beaucoup de m'avoir mis sur la voie
    j'ai utilisé du coup un ResourceManager
    "image" & n
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RM = New ResourceManager("MyResource", System.Reflection.Assembly.GetExecutingAssembly())
                Dim IMG As Bitmap = CType(My.Resources.ResourceManager.GetObject("image" & n), Bitmap)
    je ne sais pas si cela est très propre, mais ça marche parfaitement

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    j'avais pas vu la réponse de de tomlev, effectivement encore beaucoup plus simple.
    merci a vous deux

  6. #6
    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
    Juste une petite suggestion d'amélioration : plutôt que de recréer le ResourceManager à chaque fois, crée le une seule fois et garde le dans un champ de ta classe

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    ok, et encore merci

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonsoir à tous,

    J'avais exactement la même question que Lowfee !

    Malheureusement pour moi je suis moins doué que Lowfee, et malgré avoir trouvé le code dans Resources.Designer.vb, j'aurais besoin de quelques explications supplémentaires pour savoir quel code exactement mettre en place et où ?

    D'avance, je vous remercie pour vos lumières !

    Cordialement,

    El Fatos.

  9. #9
    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
    la question est un peu vague... qu'est-ce que tu veux faire exactement, et qu'est-ce qu'il te manque ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Pour être clair, je vois tout ce code dans Resources.Designer.vb :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Namespace My.Resources
     
        'Cette classe a été générée automatiquement par la classe StronglyTypedResourceBuilder
        'à l'aide d'un outil, tel que ResGen ou Visual Studio.
        'Pour ajouter ou supprimer un membre, modifiez votre fichier .ResX, puis réexécutez ResGen
        'avec l'option /str ou régénérez votre projet VS.
        '''<summary>
        '''  Une classe de ressource fortement typée destinée, entre autres, à la consultation des chaînes localisées.
        '''</summary>
        <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"),  _
         Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
         Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
         Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _
        Friend Module Resources
     
            Private resourceMan As Global.System.Resources.ResourceManager
     
            Private resourceCulture As Global.System.Globalization.CultureInfo
     
            '''<summary>
            '''  Retourne l'instance ResourceManager mise en cache utilisée par cette classe.
            '''</summary>
            <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
            Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
                Get
                    If Object.ReferenceEquals(resourceMan, Nothing) Then
                        Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowsApplication1.Resources", GetType(Resources).Assembly)
                        resourceMan = temp
                    End If
                    Return resourceMan
                End Get
            End Property
     
            '''<summary>
            '''  Remplace la propriété CurrentUICulture du thread actuel pour toutes
            '''  les recherches de ressources à l'aide de cette classe de ressource fortement typée.
            '''</summary>
            <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
            Friend Property Culture() As Global.System.Globalization.CultureInfo
                Get
                    Return resourceCulture
                End Get
                Set
                    resourceCulture = value
                End Set
            End Property
     
            Friend ReadOnly Property Image1() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image1", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
     
            Friend ReadOnly Property Image2() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image2", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
     
            Friend ReadOnly Property Image3() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image3", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
     
            Friend ReadOnly Property Image4() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image4", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
     
            Friend ReadOnly Property Image5() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image5", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
     
            Friend ReadOnly Property Image6() As System.Drawing.Bitmap
                Get
                    Dim obj As Object = ResourceManager.GetObject("Image6", resourceCulture)
                    Return CType(obj,System.Drawing.Bitmap)
                End Get
            End Property
        End Module
    End Namespace
    Et j'aimerais savoir quelles lignes de ce code extraire et exploiter pour trouver le code que je cherche, c'est-à-dire un code me permettant lorsque je clique sur un bouton de charger "Image"& i dans ma PictureBox.
    Bien sûr, dans mon code se trouve déjà une incrémentation pour qu'à chaque clic, c'est l'image suivante qui se charge.

    Il me manque seulement le plus important, à savoir la commande pour charger "Image" & i dans ma PictureBox.

    Merci d'avoir répondu si vite à mon MP, je t'en suis vraiment reconnaissant.

  11. #11
    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
    Ben c'est à peu près pareil que le code que lowfee a trouvé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim resMan As New Global.System.Resources.ResourceManager("WindowsApplication1.Resources", GetType(Resources).Assembly)
     
    pictureBox1.Image = CType(My.Resources.ResourceManager.GetObject("Image" & n), Image)
    (n étant le numéro de l'image)

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Ben c'est à peu près pareil que le code que lowfee a trouvé...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim resMan As New Global.System.Resources.ResourceManager("WindowsApplication1.Resources", GetType(Resources).Assembly)
     
    pictureBox1.Image = CType(My.Resources.ResourceManager.GetObject("Image" & n), Image)
    (n étant le numéro de l'image)
    En effet, il y avait juste une erreur où VB Express 10 m'a proposé de changer GetType(Resources) par GetType(TraceSource), et le code fonctionne à présent !

    Merci beaucoup, Tomlev !!!

    Bonne soirée à toi, et au plaisir d'une prochaine fois (ce qui risque d'arriver puisque je souhaite débuter le VB).

  13. #13
    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
    Citation Envoyé par El Fatos Voir le message
    En effet, il y avait juste une erreur où VB Express 10 m'a proposé de changer GetType(Resources) par GetType(TraceSource), et le code fonctionne à présent !
    Euh... TraceSource, c'est une classe à toi ? Parce que si c'est la classe TraceSource du framework, je vois pas trop par quel miracle ça pourrait marcher, vu que ça irait chercher les ressources dans l'assembly System.dll...

    Remplace plutôt par My.Resources.Resources (ou n'importe quel type déclaré dans ton projet)

  14. #14
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour Tomlev,

    Il y avait une erreur avec GetType(Resources), et VB Express 2010 m'a proposé de le modifier en GetType(TraceSource), puis il y a eu une autre erreur où je n'ai pas compris, j'ai cliqué sur créer quelque chose.

    En regardant dans ResourceManager.vb, je crois qu'il m'a créé ça en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Class ResourceManager
     
        Shared Sub GetObject(ByVal p1 As String, ByVal p2 As Object)
            Throw New NotImplementedException
        End Sub
     
    End Class
    Ceci pourrait expliquer que cela fonctionne ?

  15. #15
    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
    Citation Envoyé par El Fatos Voir le message
    En regardant dans ResourceManager.vb, je crois qu'il m'a créé ça en fait
    Ah ok... comme il trouvait pas la classe ResourceManager, il l'a créée

    En fait je réaliser qu'il y a plus simple... y pas besoin de créer toi-même une instance de ResourceManager, il y en a déjà une dans My.Resources. Et en plus je de me rendre compte que le code que j'ai posté utilisait déjà ça, je l'ai copié/collé et modifié et j'ai oublié de changer un truc

    Donc normalement le seul code dont tu as besoin est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pictureBox1.Image = CType(My.Resources.ResourceManager.GetObject("Image" & n), Image)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    En effet, Tomlev, ton code fonctionne parfaitement !

    Peux-tu m'éclairer sur ce que sont une instance et une classe ?

    Merci

  17. #17
    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
    Citation Envoyé par El Fatos Voir le message
    Peux-tu m'éclairer sur ce que sont une instance et une classe ?
    Euh... si je me lance là-dedans, on n'est pas sortis de l'auberge

    C'est vraiment les bases de la programmation orientée objet, tu ne pourras jamais vraiment progresser sans connaître ça. Je te conseille de lire un bouquin ou un cours, qui t'expliquera ça beaucoup mieux que je ne pourrais le faire. Il y a un cours complet de VB.NET ici :
    http://plasserre.developpez.com/cours/vb-net/

  18. #18
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    D'accord.

    Je vais donc me concentrer là-dessus.

    Merci encore.

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

Discussions similaires

  1. Problèmes de accès aux ressources dans une JSP
    Par sepltura dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/06/2012, 09h49
  2. Accès aux ressources par l'interface SessionAware
    Par mumu27 dans le forum Struts 2
    Réponses: 3
    Dernier message: 28/08/2011, 10h53
  3. Réponses: 3
    Dernier message: 25/11/2010, 15h59
  4. [DOM] Accès au DOM par une variable
    Par riete dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/07/2008, 17h34
  5. Réponses: 11
    Dernier message: 15/06/2007, 17h43

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