Créer des picturbox a l infini [Résolu]

Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
- - Dernière réponse : dj naoki
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
- 6 nov. 2013 à 16:20
Bonjour,
Je fait un petit jeu et pour le fond je voudras faire un truc modulable en 64 images le pb c est que je ne vais pas m amuser a créer une variable et un picturebox a chaque foi

N y aurais il pas un moyen de faire une procédure qui créer un picturbox a chaque foi que je l appel ?
Merci.
Afficher la suite 

11 réponses

Messages postés
4265
Date d'inscription
samedi 8 septembre 2007
Statut
Membre
Dernière intervention
29 août 2018
16
0
Merci
Oy !

Tu peux avoir par exemple :

 
        public addPictureBox(Point location)
        {
            PictureBox m_pic
            m_pic = new PictureBox();
            m_pic.Location = location;
            form1.Controls.Add(m_pic);
         }


dans le code de ta forme (form1 étant le nom de ta form).

Plus d'info sur "Point" :
http://msdn.microsoft.com/fr-fr/library/system.drawing.point.aspx


naga
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
1
0
Merci
salut je me suis tromper de section je suis en vb.net mais globalement c'est une procédure comme ca que j'utilise
mais elle ne me permet que d'en créer un...
Whismeril
Messages postés
13509
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juillet 2019
288 -
Bonjour, sujet déplacé vers VB
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
13
0
Merci
Bonjour dj naoki.
Le petit programme qui suit,

Public Class Accueil
    Private WithEvents pBox As New PictureBox

    Private Sub Accueil_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        pBox.BackColor = Color.Black
        Me.Controls.Add(pBox)
    End Sub

End Class

pourra peut-être vous être utile.

Cordialement.
0
Merci
Salut,

Il est préférable de dessiner sur un bitmap unique (voir Graphics sur msdn) plutôt que de charger 64 picturebox (solution lourde et très coûteuse en ressources).

Ah et un grand bonjour à Zermelo...
Zermelo
Messages postés
378
Date d'inscription
samedi 22 septembre 2012
Statut
Membre
Dernière intervention
13 août 2017
13 -
banana32, je te fais mes amitiés.
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
1
0
Merci
salut et dsl pour le temps sans raiponce la j'arrive a décliner mais cela décline toujours au même endroit
Private Sub PictureBox1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim pnj As Bitmap = My.Resources.dirt__2_
e.Graphics.DrawImage(pnj,C ursor.Position.X,C ursor.Position.Y)
'On purge les objets temporaires
pnj.Dispose()
End Sub

c'est a dire que les images ce mettent toutes a la même position
Messages postés
6135
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 juillet 2019
81
0
Merci
Bonjour,

Tu peux mettre tes PictureBox dans un Panel comme ceci:

Ajouter un Button et un Panel

Voici le code dans les balises:

 Dim pic As PictureBox
Dim x, y, diff, dify, i As Int32


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
pic = New PictureBox()
i += 1
pic.BorderStyle = BorderStyle.Fixed3D
pic.SizeMode = PictureBoxSizeMode.StretchImage
pic.Image = My.Resources.dirt__2_
pic.SetBounds(x, y, 100, 100)
x += 100
'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
If x >= Panel1.Width Or (x + 100) > Panel1.Width Then
diff = Panel1.Width - x
'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
y += 100
x = 0
End If
If ((y + 100) > Panel1.Height) Then
dify = Panel1.Height - y
End If
'ajouter une image
Panel1.Controls.Add(pic)
End Sub


Et le code sans les balises pour ceux qui comme moi lise le code dans les balises sur une seule ligne. Cela n'a toujours pas été réglé, c'est très pénalisant!!!!!

Dim pic As PictureBox
Dim x, y, diff, dify, i As Int32


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
pic = New PictureBox()
i += 1
pic.BorderStyle = BorderStyle.Fixed3D
pic.SizeMode = PictureBoxSizeMode.StretchImage
pic.Image = My.Resources.dirt__2_
pic.SetBounds(x, y, 100, 100)
x += 100
'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
If x >= Panel1.Width Or (x + 100) > Panel1.Width Then
diff = Panel1.Width - x
'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
y += 100
x = 0
End If
If ((y + 100) > Panel1.Height) Then
dify = Panel1.Height - y
End If
'ajouter une image
Panel1.Controls.Add(pic)
End Sub

Pour plus de détail voir mon dernier programme :
Planche contact en VB.Net
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
si les images servent seulement de fond tu peux
essayer ainsi

 Private Structure imagedata
Public thebitmap As Bitmap
Public coords As Point
End Structure

Private listimage As New List(Of imagedata)

'on va remplir listimage avec les images de la resources
' pour faciliter la tache j'ai nommé toutes les images avec le meme
'nom et suffixe 1 2 3 ex im1 im2 im3

Private Sub LoadImage()
Dim imagedt As imagedata
Dim filename As String
Dim x,y As Integer
filename = "im"
x = 10
y = 20
For iter As Integer = 1 To 4
imagedt.thebitmap = CType(My.Resources.ResourceManager.GetObject(filename & iter.ToString), Bitmap)
imagedt.coords = New Point(x, y)
x += imagedt.thebitmap.Width + 6
listimage.Add(imagedt)
Next

End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadImage()

end sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
For Each item As imagedata In listimage
e.Graphics.DrawImage(item.thebitmap, item.coords)
Next
End Sub
Utilisateur anonyme -
Salut cs_ShayW,

C'est aussi comme ça que je m'y serais pris. Mais j'aurais utilisé une classe plutôt que ta structure. Les structures sont des 'dinosaures' hérités de vb6 (bouhhh).
cs_ShayW
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46 -
Salut banana32

après avoir lu

http://stackoverflow.com/questions/3898443/vb-net-is-using-structures-considered-nasty



Private Class imagedata
Public thebitmap As Bitmap
Public coords As Point
End Class

Private listimage As New List(Of imagedata)

'on va remplir listimage avec les images de la resources
' pour faciliter la tache j'ai nommé toutes les images avec le meme
'nom et suffixe 1 2 3 ex im1 im2 im3

Private Sub LoadImage()
Dim filename As String
Dim x As Integer
filename = "save"
x = 10
For iter As Integer = 1 To 4
Dim imagedt As New imagedata
imagedt.thebitmap = CType(My.Resources.ResourceManager.GetObject(filename & iter.ToString), Bitmap)
imagedt.coords = New Point(x, 10)
x += imagedt.thebitmap.Width + 6
listimage.Add(imagedt)
Next

End Sub

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
LoadImage()

end sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
For Each item As imagedata In listimage
e.Graphics.DrawImage(item.thebitmap, item.coords)
Next
End Sub
Utilisateur anonyme -
Tu peux simplifier ton code en incluant un constructeur qui accepte des paramètres (ceci est un exemple) :
Private Class imagedata
Public thebitmap As Bitmap
Public coords As Point
sub new(file as string, pt as point)
thebitmap = CType(My.Resources.ResourceManager.GetObject(file), Bitmap)
coords = pt
end sub
End Class


listimage.add(New imagedata(filename & iter.tostring, new point(x, 10)))
dj naoki
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
1 -
en faite il me faudrait un code qui me permette de créer des images et de les déplacer en suite comme je veux et que ce soit infini aussi

merci
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
26 décembre 2018
46
0
Merci
Tu n'es pas au restaurant
mais dans un forum avec des volontaires et ce genre de demande
et la façon de s'exprimer oblige à te dire
bon courage débrouille toi tout seul on te répondra quand tu
formuleras ta question concernant un problème précis et spécifique correspondant au règle du forum
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
1
0
Merci
Désolé c'est vrais que c'était un peut exagérer de ma par (j'ai poster ce message en 10 seconde a pêne et je n'ai pas fait attention)

en faite ce que je voulais dire que j'ai laisser tomber cette idée de Picturebox en faite la je n'en n'ai qu'un et je décline déçu ma question c'est comment je peut faire pour créer des dessin a l'infini et comment je peut faire pour garder le contrôle déçu (déplacer un dessin en particulier ou le supprimer gérer sa position ect....)
merci a tous et a toutes
et encore désolé
0
Merci
Ta nouvelle question n'a plus rien a voir avec le titre. Clôture cette discussion et ouvre un nouveau sujet.
Bonne prog.
Messages postés
517
Date d'inscription
mercredi 22 décembre 2010
Statut
Membre
Dernière intervention
25 septembre 2016
1
0
Merci
ok merci :)