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 :

créer des instances "réelles" d'objets indéxées ! [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Par défaut créer des instances "réelles" d'objets indéxées !
    bonjour, encore moi !

    Je souhaite pouvoir travailler sur des instances de picturebox.

    en fait, je place des pions sur une "carte", chaque pion est représenté à travers une picturebox placée sur la carte.

    dans le tutoriel VB.net, il est très bien expliqué que l'indexation d'objets de VB6 n'est plus possible. ily est proposé une solution alternative (pour des textbox) :

    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
     
    Dim Textes(8) As TextBox           
     
    'puis dans le form_load
    Textes(0) = TextBox0
    Textes(1) = TextBox1
    Textes(2) = TextBox2
    ... 
    'ensuite, on peut bien utiliser la syntaxe de VB 6.0
     
    Dim i As integer
    For i = 0 To 8
     Dim MyTexte As Integer= Textes(i).Text
    ..
    Next

    J'ai donc suivi la procédure décrite, mais cela ne fonctionne pas comme je veux : les objects (textbox0, textbox1 doivent être créés en préalable "à la main".

    sinon, des que j'essaye Mypicture(1).image = ....
    il m'indique ne pas trouver d'objet à manipuler...

    Le problème, je pense est que cette déclaration : Dim mypicturebox(8) As picturebox
    créé des objets "virtuels" : il n'existe aucun objet réel dans lequel placer une image sans une affectation longue (text(1)=textbox1, text(2)=textbox2, etc...)
    j'ai plus de 300 picturebox possibles....

    je voudrais donc créer en code au fil du programme ces nouvelles instances "réelles"...

    pouvez vous me donner une piste de réflexion ?
    ou corriger ma méthode ?

    pour rappel, je veux pouvoir manipuler ces objets les uns après les autres grace à un for... next et qu'ils réagissent à des évènements communs (grâce à Handle je pense mais je suppose que ce sera ma question suivante !)


    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Dur dur de passer de VB6 à VBNet, on se reds compte que les percepts de l'objet ne sont pas du tout acquis !

    Breff...on va éviter le longs discours puisque tu as su identifier avec tes mots l'origine du problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim pcbs As New List(Of PictureBox)
    Tu ajoutes autant de pictureBox que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim pcb1 as new picturebox
    pcbs.add(pcb1)
    dim pcb2 as new picturebox
    pcbs.add(pcb2)
    '.....
    'etc....
    Tu travailles avec l'instance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pcbs(0).image = new bitmap(.......)
    pcbs(1).image = new bitmap(.......)
    Il existe d'autres façons de faire mais on va dire que cela colle avec tes interrogations donc j'essai de rester dans le contexte.

    A+

  3. #3
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Par défaut
    argh....

    je dois m'en sortir sans pouvoir déguster cela.

    il me tarde de revenir de cette $£*%@&# de soirée !


    tout s'éclaire... ou presque.

    mais je vais tester d'abord en rentrant et poser mes questions s'il en reste.

    mille milliards de mercis !

  4. #4
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Par défaut
    re bonjour,


    cela
    je comprends donc ce que tu me proposes mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim pcb1 as new picturebox
    pcbs.add(pcb1)
    dim pcb2 as new picturebox
    pcbs.add(pcb2)
    '.....
    'etc....
    implique que je tape chaque ligne pour pcb1, pcb2... j'en ai peut être trois cent !

    est il possible d'automatiser ceci ?
    je suppose que je peux pas créer de nom d'objet avec une variable ?



    par ailleurs, cette déclaration DIM que je fais dans form1.load (n'est ce pas ? ) ne limite-t-elle pas la portée de ces instances en limitant l'accès d'autres procédures ? je peux les manipuler dans d'autres sub... ?

  5. #5
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Je ne saisi pas bien l'intérêt ou le but de tout cela mais pour répondre à tes questions :

    Si tu souhaites accéder à ta liste de pictureBox au niveau de ta classe Form1 alors tu la déclares ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class Form1
        Dim pcbs as new list(of picturebox) ' Ou Private pcbs as new list(of picturebox) c'est une portée au niveau de la classe uniquement
     
        Sub New()
            InitializeComponent()
            'Tu n'oublies pas sur cette ligne d'instancier des PictureBox et de les ajouter à ta liste "pcbs" !!!!
        End sub
     
    End class
    Ton problème de portée est un synonyme de méconnaissance des fondamentaux de la programmation :

    Si tu veux accéder à ta liste depuis n'importe quelle classe de ton projet alors tu places cette dite liste avec un attribut Shared dans une autre classe, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Class LaListe
     
        Public shared pcbs as list(of picturebox)
     
            Shared sub new()
                pcbs = new  list(of picturebox)
            end sub
     
    end class
    Pour palier au problème de la redondance de code, il faut créer tes PictureBox dynamiquement tout en gardant à l'esprit qu'un contrôle quel qu'il soit nécessite qu'on lui affecte :

    - un nom
    - une taille (utile pour une pictureBox)
    - et surtout un abonnement dynamique à au moins un événement : l’événement Click te sera fort utile si tu as besoin plus tard d'effectuer une action lorsque l'utilisateur clic sur une de ces PictureBox préalablement ajouté sur un formulaire !!!

    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
     
    Public Class Form1
        Private pcbs as new list(of picturebox)
     
        Sub New()
            InitializeComponent()
            InitPcbs
        End sub
     
        private sub InitPcbs
            for i% = 0 to 299
                Dim pcb as new picturebox With {.Name = "Pbx" & i.tostring, .Size = New Size(20, 20)}
                Addhandler pcb.Click, AddressOf pcb_Click
                pcbs.Add(pcb)     
            next
        end sub
     
        Private Sub pcb_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim pbx as PictureBox = Trycast(sender,PictureBox )
            Msgbox(pbx.name) ' Si tu places un jour la picturebox sur ton form1 alors lorsque tu cliqueras dessus ca retournera le nom de la pcb qui a été cliqué !
        end sub
     
    End class
    A+

  6. #6
    Membre averti
    Homme Profil pro
    passionné
    Inscrit en
    Janvier 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : passionné
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2016
    Messages : 22
    Par défaut
    oui, la route est longue...



    Mais ce sont les seuls aspects "difficiles" que j'ai à gérer : le reste sera "simplement" de l’algorithme...

    je crois que cette fois ça marche !


    jusqu'à la prochaine fois, bien sûr !


    merci pour ton aide précieuse.

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

Discussions similaires

  1. [GMF] Créer des instances d'éléments par programmation
    Par hashas dans le forum Eclipse Modeling
    Réponses: 1
    Dernier message: 03/08/2010, 23h20
  2. Créer des instances de classes EMF dans Eclipse avec une jolie IHM
    Par obernard dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 24/02/2009, 19h21
  3. Créer des instances en boucle
    Par chat'mar dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 08/06/2008, 12h08

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