Picturebox index en vb .net [Résolu]

Messages postés
1244
Date d'inscription
mardi 7 mai 2002
Dernière intervention
10 février 2016
- - Dernière réponse : pcpunch
Messages postés
1244
Date d'inscription
mardi 7 mai 2002
Dernière intervention
10 février 2016
- 13 sept. 2015 à 14:18
Bonjour,

Je cherche comment générer des picturebox en vb2010, comme on le fesait en vb6 avec un index.
Je dois generer des picturebox et pouvoir recupérer l index au clic de cette PB
j'ai bien trouver ce code :

Dim Pictureboxes As List(Of PictureBox) = New List(Of PictureBox)
For I As Integer = 0 To 9
Dim P As PictureBox = New PictureBox
P.Size = Boite.Size
P.SizeMode = PictureBoxSizeMode.StretchImage
P.Location = New Point(I * 100 + 20, Boite.Top)
P.BorderStyle = BorderStyle.FixedSingle

Pictureboxes.Add(P)
P.Image = Boite.Image
Me.Controls.Add(P)
Next I

Mais je ne sais pas comment récupérer le clic sur une des picturebox crée dynamiquement.

De plus je cherche a ecrire un chiffre dans la picture box générer ?
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
5612
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2018
1
Merci
Bonjour,

Voici un exemple à adapter:

mettre dans le Form un panel de 284 x260 avec ce code:

Public Class Form1
    Dim image As PictureBox
    Dim x, y, diff, dify As Int32
    Dim vignette As Integer

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim i As Int32
        Panel1.Controls.Clear()
        y = 0
        x = 0
        For i = 1 To 9
                    
         image = New PictureBox

            image.Width = 100
            image.Height = 100
            image.BorderStyle = BorderStyle.Fixed3D
            image.Visible = True
            image.Name = "mapicture " & i
            vignette = 90
            image.SetBounds(x, y, vignette, vignette)
            x += vignette
            'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
            If x >= Panel1.Width Or (x + vignette) > Panel1.Width Then
                diff = Panel1.Width - x
                'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
                y += vignette
                x = 0
            End If
            If ((y + vignette) > Panel1.Height) Then
                dify = Panel1.Height - y
            End If

            AddHandler image.MouseDown, AddressOf PictureBox_MouseDown
            AddHandler image.MouseMove, AddressOf PictureBox_MouseMove
            AddHandler image.DoubleClick, AddressOf PictureBox_DoubleClick
            'ajouter une image
            Panel1.Controls.Add(image)
        Next i
    End Sub
    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
    Private Sub PictureBox_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        ' On récupère le contrôle cliqué ...
        Dim pictTmp As PictureBox = DirectCast(sender, PictureBox)
        MsgBox(pictTmp.Name)
    End Sub
End Class

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de cs_Le Pivert
Messages postés
5612
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2018
1
Merci
La pictureBox n'a pas destination a recevoir du texte. Il faut utiliser une TextBox.
Tu peux faire la même chose avec des TextBox dynamiques, comme ceci:

Public Class Form1
    Dim texte As TextBox
    Dim x, y, diff, dify As Int32
    Dim vignette As Integer
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim i As Int32
        Panel1.Controls.Clear()
        y = 0
        x = 0
        For i = 1 To 9
            'création TextBox
            texte = New TextBox()
            texte.Multiline = True
            texte.Width = 100
            texte.Height = 100
            texte.BorderStyle = BorderStyle.Fixed3D
            texte.Visible = True
            texte.Name = "montexte " & i
            vignette = 90
            texte.SetBounds(x, y, vignette, vignette)
            x += vignette
            'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
            If x >= Panel1.Width Or (x + vignette) > Panel1.Width Then
                diff = Panel1.Width - x
                'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
                y += vignette
                x = 0
            End If
            If ((y + vignette) > Panel1.Height) Then
                dify = Panel1.Height - y
            End If
            AddHandler texte.DoubleClick, AddressOf TextBox_DoubleClick
            'ajouter une textbox
            Panel1.Controls.Add(texte)
        Next i
    End Sub
    Private Sub TextBox_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        Dim objFont As System.Drawing.Font
        objFont = New System.Drawing.Font("Arial", 48, FontStyle.Bold Or FontStyle.Italic)
        ' On récupère le contrôle cliqué ...
        Dim textTmp As TextBox = DirectCast(sender, TextBox)
        textTmp.Name = Replace(textTmp.Name, "montexte", "")
        textTmp.Text = textTmp.Name
        textTmp.TextAlign = HorizontalAlignment.Center
        textTmp.Font = objFont
    End Sub

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

cs_Le Pivert
Messages postés
5612
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2018
-
Toujours dans un panel de 284 x 260
Commenter la réponse de cs_Le Pivert
Messages postés
1244
Date d'inscription
mardi 7 mai 2002
Dernière intervention
10 février 2016
0
Merci
merci beaucoup c'est exactement ça !
me reste juste a écrire le chiffre dans la picturebox .
Commenter la réponse de pcpunch
Messages postés
1244
Date d'inscription
mardi 7 mai 2002
Dernière intervention
10 février 2016
0
Merci
Merci beaucoup, nikel !!!
Commenter la réponse de pcpunch

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.