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 :

[vb 2005] 100 picturebox indexés et evenements click


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 9
    Par défaut [vb 2005] 100 picturebox indexés et evenements click
    Bonjour, c'est mon premier post ici.

    Je fais un puzzle de 100 morceaux provenant d'une image.
    Je suis capable de créer les 100 picturebox du genre mapicture(1) avec ce 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
     
        Dim maPicture(100) As PictureBox
        Dim adresseImage As String = "C:\Users\Public\Pictures\Sample Pictures\Desert Landscape.jpg"
     
        Private Sub InitializePictureBox(ByVal largeur As Integer)
            Dim compte As Integer = 0
            'affichage de l'image complete dans un picturebox généré par vb 2005
            Me.PictureBox1.Image = Image.FromFile(adresseImage)
     
            For large As Integer = 1 To 10
                For haute As Integer = 1 To 10
                    compte = compte + 1
                    maPicture(compte) = New PictureBox
     
                    '  positionnement de chaque  picturebox
                    Me.maPicture(compte).Location = New System.Drawing.Point((largeur * large) + 400, (largeur * haute))
                    Me.maPicture(compte).Size = New System.Drawing.Size(largeur, largeur)
                    Me.maPicture(compte).TabStop = False
                    Me.maPicture(compte).SizeMode = PictureBoxSizeMode.Zoom
                    Me.maPicture(compte).BorderStyle = BorderStyle.None
     
                    ' Ajout du picturebox a la form
                    Me.Controls.Add(Me.maPicture(compte))
     
                    'copy une partie de l'image original dans la picturebox a l'aide d'une function
                    Me.maPicture(compte).Image = ImagePart(Me.PictureBox1.Image, (largeur * large), (largeur * haute), largeur, largeur)
                Next
            Next
            Me.Refresh()
        End Sub
    Tout ce code fonctionne bien.
    Mon problème, c'est de récupérer un évènement click pour chacune des 100 picturebox. Je ne sais pas comment faire. Il n'y a pas beaucoup de documentation sur le sujet, pour ne pas dire inexistant

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 154
    Par défaut
    Tu crées une procédure qui la même signature que l'évènement Click c.a.d :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
     
        End Sub
    Dans ta boucle de création de PictureBox tu abonnes le contrôle à l'évènement via HadHandler et tu places le N° dans le Tag (ça peut toujours servir)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Addhandler Me.maPicture(compte).Click, AddressOf PictureBox_Click
    Me.maPicture(compte).Tag=compte
    Dans ta procédure PictureBox_Click tu peux récuperer le PictureBox qui a levé l'evenement via l'objet sender en le castant en PictureBox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub PictureBox_Click_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim PicBox As PictureBox=DirectCast(sender,PictureBox)
     
        End Sub
    Il existe 3 méthode de Cast dont une qui ne léve pas d'Exception en cas d'erreur (TryCast). Tu peux aller voir ici pour plus détail :
    http://msdn2.microsoft.com/fr-fr/lib...6x(VS.80).aspx

    Normalement ton Cast ne lévera jamais d'erreur puisque tu n'abonnes que des PictureBox mais bon, c'est bon à savoir.

    Si tu veux connaître l'index tu peux le récuperer dans le Tag du PictureBox casté.

    Dans l'absolu, avec cette methode tu n'as même plus besoin d'avoir un tableau pour conserver une ref vers tes PictureBox. Ton Dim maPicture(100) As PictureBox
    tu peux le shooter et mettre ça dans ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim PicBox as new PictureBox
                    '  positionnement de chaque  picturebox
                    PicBox .Location = New System.Drawing.Point((largeur * large) + 400, (largeur * haute))
     [.../...]
                    ' Ajout du picturebox a la form
                    Me.Controls.Add(PicBox)
    C'est ta forms qui te servira de tableau en qq sorte.
    Ensuite tu as peut être une bonne raison d'avoir un tableau...
    Tu ne serais pas un ancien dev VB6 par hasard...
    Et oui c'est fini la proprieté Index dans les contrôles en .Net

    @+

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 9
    Par défaut
    Je vais tester ca bientôt...

    je suis un occasionnel de vb, la derniere fois c'était du VB4

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par yfleury Voir le message
    Je vais tester ca bientôt...

    je suis un occasionnel de vb, la derniere fois c'était du VB4
    J'ai deja crée un jeu avec 256 picturebox (une sorte de démineur) et puis j'ai utilisé à peu pres la meme méthode que décrite précédemment. Donc ca marchera sans problèmes majeurs
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 9
    Par défaut
    Bon, j'ai remodeler mon code pour ne plus avoir d'index. Pour être à la page...

    L'affichage des 100 picturebox se passe bien.

    Avec l'évènement click, je n'arrive pas à modifier l'une des picturebox (ni l'une , ni l'autre) comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub maPicture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim maPicture As PictureBox = DirectCast(sender, PictureBox)
            compteur = compteur + 1
            Me.Label1.Text = compteur
            Me.maPicture.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
            Me.maPicture.Refresh()
     
        End Sub
    J'ai placer un compteur dans l'évènement click et il s'incrémente bien a chaque fois que je clique sur n'importe laquelle des picturebox

    ma nouvelle question est de savoir: comment retourner une image contenue dans un picturebox sur qui on vient de cliquer.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 9
    Par défaut
    Eureka!

    j'ai trouver mon erreur, voici le code corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub maPicture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim maPic As PictureBox = DirectCast(sender, PictureBox)
            compteur = compteur + 1
            Me.Label1.Text = compteur
            maPic.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
            maPic.Refresh()
     
        End Sub
    je mettais le "me." devant maPic et j'obtenais une erreur...

    Ca fonctionne a merveille. mon Problème est résolu.

    Il ne me reste plus qu'a m'attaquer au drag and drop

  7. #7
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Deux choses supplémentaires pour toi :
    Pour l'incrémentation des compteurs utilise : cpt += 1
    Pour les conversions, utilise Ctype au lieu de DirectCast.
    Pas la peine de mettre de "me" dans ton cas.

    Correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub maPicture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
            Dim maPic As PictureBox = Ctype(sender, PictureBox)
            compteur += 1
            Label1.Text = compteur
            maPic.Image.RotateFlip(RotateFlipType.Rotate90FlipNone)
            maPic.Refresh()
        End Sub
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

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

Discussions similaires

  1. [C#] Evenement Click sur Datagrid
    Par Joad dans le forum ASP.NET
    Réponses: 2
    Dernier message: 30/05/2005, 13h37
  2. [vb.net] retourner une valeur dans l'evenement click
    Par graphicsxp dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/05/2005, 13h06
  3. [VBA] Evenement Click Cellule
    Par kribot dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2005, 09h47
  4. besoin d aide evenement click droit
    Par yuvino dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/12/2004, 10h32
  5. [C#] Evenement click dans un Panel
    Par keyser-soze dans le forum Windows Forms
    Réponses: 5
    Dernier message: 21/05/2004, 22h21

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