Créer des picturbox a l infini

Résolu
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 - 10 oct. 2013 à 17:58
dj naoki Messages postés 511 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.

11 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
11 oct. 2013 à 11:12
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
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
18 oct. 2013 à 22:34
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...
0
Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
19 oct. 2013 à 07:50
Bonjour, sujet déplacé vers VB
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
19 oct. 2013 à 12:15
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
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...
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
19 oct. 2013 à 14:04
banana32, je te fais mes amitiés.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
27 oct. 2013 à 16:35
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
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
27 oct. 2013 à 17:52
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 27/10/2013 à 21:19
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
0
Utilisateur anonyme
28 oct. 2013 à 18:54
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).
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
28 oct. 2013 à 21:27
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
0
Utilisateur anonyme
28 oct. 2013 à 22:18
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)))
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
6 nov. 2013 à 09:28
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 6/11/2013 à 12:57
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
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
6 nov. 2013 à 15:16
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
Utilisateur anonyme
6 nov. 2013 à 15:38
Ta nouvelle question n'a plus rien a voir avec le titre. Clôture cette discussion et ouvre un nouveau sujet.
Bonne prog.
0
dj naoki Messages postés 511 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 25 septembre 2016 2
6 nov. 2013 à 16:20
ok merci :)
0
Rejoignez-nous