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

Résolu
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   -  
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

2 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Tu fais une boucle pour générer autant de contrôle que necessaire.
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23
 
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 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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   Statut Membre Dernière intervention   23
 
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
Utilisateur anonyme
 
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 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
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   Statut Membre Dernière intervention   23
 
Merci ! C'est ce que je cherchais.
0