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 :

Accéder à un objet créé dynamiquement


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut Accéder à un objet créé dynamiquement
    bonjour,
    je débute un peu dans la POO et je galère un peu avec mon code

    je dois concevoir un logiciel dans le même style que visual studio visuellement parlant, je dois faire une barre d'outil sur le coté avec des objets à ajouter dans la form main principale, l'objet(i) s'affiche graphiquement sous forme d'une image(i), quand je double clique sur l'image(i), je dois avoir les paramètres de l'objet(i) qui s'affiche dans une form(i). Dans cette form(i) j'ai un bouton qui "hide" (cache) la form(i) pour revenir sur la form main.

    Je crée mes objet(i), mes image(i) et mes form(i) dynamiquement :

    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
    dim o as objet
    dim image as picturebox
    dim form0 as form
    dim i as integer = 0
     
    Private Sub b_CréerObjet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles b_CréerObjet.Click
     
            i += 1
     
            'création d'un nouvel objet
            o = New objet
            o.name = "objet" & "(" & i & ")"
     
            'Création d'une image objet
            image = New PictureBox
     
            With image
                .Name = "image" & "(" & i & ")"
                .ClientSize = New Size(80, 80)
                .SizeMode = PictureBoxSizeMode.StretchImage
                .ImageLocation = "...\ismart.jpg"
                .Top = 71
                .Left = 420
            End With
     
            AddHandler image.MouseDown, AddressOf PictureBox_MouseDown
            AddHandler image.MouseMove, AddressOf PictureBox_MouseMove
            AddHandler image.DoubleClick, AddressOf PictureBox_DoubleClick
     
            Me.Controls.Add(image)
     
            'création et affichage de la form
            form0 = New ParametreAutom
            form0.Name = "form " & "(" & i & ")"
            form0.Text = "Ajouter un objet"
            form0.Show()
     
     
     
        End Sub
    #Region "Evènements sur les objets"
     
    'les 2 évènements suivant permettent de déplacer une image avec la souris
        Dim x As Integer
        Dim y As Integer
     
        Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If e.Button = Windows.Forms.MouseButtons.Left Then
                x = e.X
                y = e.Y
            End If
        End Sub
     
        Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            If e.Button = Windows.Forms.MouseButtons.Left Then
                sender.Left += (e.X - x)
                sender.Top += (e.Y - y)
            End If
        End Sub
     
     
     
    'cet évènement doit ouvrir la form de paramètre de l'objet concerné par le doubleclick
    'fen.show() m'ouvre la dernière form crée et pas la form de l'objet concerné par le doubleclick
    'je ne sais pas comment accéder à la form de l'objet concerné par le le doubleclick
        Private Sub PictureBox_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
            form0.show()
        End Sub
     
    #End Region
    pour mon problème tout est dit dans le code en commentaire sur la dernière sub des évènements à la fin

    par exemple je crée un objet1 avec une image1 qui m'ouvre un form1, je crée un objet2 avec une image2 qui m'ouvre une form2
    je hide form1 et form2, quand je doubleclick sur image1 ça m'ouvre form2 et pas form1 ...

    comment accéder à un objet instancié dynamiquement sachant qu'il n'existe pas encore et comment connaître son nom ?

    sinon comment "lier" la form et l'image à l'objet instancié ? dans la class objet ?

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    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 154
    Points : 25 072
    Points
    25 072
    Par défaut
    plusieurs choses, déjà dans un évènement sender représente l'instance qui déclenche l'évènement
    donc directcast(sender,picturebox) te donnera le picturebox à déplacer

    après tu déclare une variable image as picturebox
    si tu dois en créer plusieurs, utilise une collection, comme ca tu pourras depuis n'importe quelle sub les retrouver tous

    le name devient inutile, bienque tu puisses le retrouver


    ensuite pour lier un form à un picturebox, il a la solution de facilité, chaque controle à une propriété tag servant à lier quelque chose à un controle
    donc monform.tag = monpicturebox ou l'inverse
    ensuite utiliser directcast pour caster l'objet dedans



    un petit mot sur directcast, en poo il y a de l'héritage, si B hérite de A, dans une variable déclarée as A je peux mettre un B mais l'intellisense n'affiche que les membres de la variable déclarée, quand on est sur du type que contient une variable, on peut demander à la caster sur le type voulu via directcast
    permettant via l'intellisense d'utiliser les membres "étendus" obtenus par l'héritage
    toutes les classes héritent de Object
    sender est as Object, tag aussi, celà permet de mettre tout est n'importer quoi, mais nécessite l'utilisiation de directcast derrière
    si le cast est impossible, ca génère une erreur
    quand on veut savoir le type réelle d'une instance contenu dans une variable on peut utiliser TypeOf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not TypeOf sender Is PictureBox Then Exit Sub
    Dim pcb As PictureBox = DirectCast(sender, PictureBox)
    la valeur Nothing n'est pas typée
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/05/2010, 14h17
  2. Accéder aux méthodes d'objets alloués dynamiquement
    Par Galip dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/05/2007, 22h57
  3. accéder à un objet d'une frame
    Par pekka77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/11/2005, 10h35
  4. [Objet] Représentation dynamique
    Par Mister Nono dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 21/10/2005, 12h38
  5. [POO] detecter un objet créé dynamiquement ...
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/10/2005, 12h02

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