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

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

2 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Tu fais une boucle pour générer autant de contrôle que necessaire.
    0
    1. hcp7kuz Messages postés 238 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
    2. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      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
    3. hcp7kuz Messages postés 238 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
    4. 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
  2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. hcp7kuz Messages postés 238 Date d'inscription   Statut Membre Dernière intervention   23
       
      Merci ! C'est ce que je cherchais.
      0