[VB.NET] Afficher plusieurs fois le même objet dynamique

Résolu/Fermé
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 - 21 mai 2016 à 19:03
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 - 22 mai 2016 à 10:05
Bonjour,

Comme dit dans le titre, je souhaiterais afficher plusieurs fois le même objet sur ma form.

Un exemple :

Dim PictureBox As New PictureBox
PictureBox.Size = My.Resources.Image.Size
PictureBox.Image = My.Resources.Image
PictureBox.SizeMode = PictureBoxSizeMode.StretchImage
For x As Integer = 0 To 10
    PictureBox.Location = New Point(x * 50, x * 50)
    Me.Controls.Add(PictureBox)
Next


J'aimerais que ce code affiche dix PictureBox différentes.

Merci de votre aide,

hcp7kuz

2 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
21 mai 2016 à 20:16
Tu fais une boucle pour générer autant de contrôle que necessaire.
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
Modifié par hcp7kuz le 21/05/2016 à 20:31
Merci de ta réponse, mais le problème est que je voudrais avoir accès à cet PictureBox en dehors de cette sub, et que si je la déclare à l'intérieur, je ne pourrais pas y accéder à l'exterieur.

Edit :
Je voudrais y accéder depuis toutes les sub/fonction/...
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 330
21 mai 2016 à 20:50
Tu fais une variable d'objet (déclarée en dehors d'une fonction) de type List(Of PictureBox) et tu ajoutes dedans chacun de tes PictureBox.
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
21 mai 2016 à 22:35
Je ne connais pas les variables List(Of Object), et j'ai essayer mais je n'y arrive pas.
Je voudrais juste afficher plusieurs fois la même PictureBox.
Merci de ton aide.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
22 mai 2016 à 00:54
Bonsoir et NHenry t'as juste proposé la solution la plus simple.
Savoir gérer la portée des variables et les collections sont des notions de base en programmation.
Tu trouveras de l'information ici
https://plasserre.developpez.com/cours/vb-net/?page=langage-vb1#LV-B-3-o

Mais je te conseille vivement de prendre le cours par le début
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié par cs_Le Pivert le 22/05/2016 à 08:20
Bonjour à tous,

Mettre un Form de 318x343
un Panel de 300x300 avec ce code:

Option Strict On
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
            'Création d'une image objet
            image = New PictureBox
            image.Width = 100
            image.Height = 100
            image.BorderStyle = BorderStyle.Fixed3D
            image.SizeMode = PictureBoxSizeMode.StretchImage
            image.Visible = True
            image.Name = "mapicture " & i
            image.Image = My.Resources.Copie_de_Copie_de_Créte_001'adapter le nom de l'image
            vignette = 100
            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.MouseDoubleClick, 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)
        Dim pictTmp As PictureBox = DirectCast(sender, PictureBox)
        If e.Button = Windows.Forms.MouseButtons.Left Then
            pictTmp.Left += (e.X - x)
            pictTmp.Top += (e.Y - y)
            pictTmp.BringToFront()
        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


en cliquant sur les Pictures tu as leur nom, tu peux aussi les déplacer, voir cet exemple:

https://codes-sources.commentcamarche.net/source/101417-puzzle-en-drag-and-drop


Voilà


@+ Le Pivert
0
hcp7kuz Messages postés 243 Date d'inscription mardi 18 août 2015 Statut Membre Dernière intervention 23 mars 2019 23
22 mai 2016 à 10:05
Merci ! C'est ce que je cherchais.
0