Comment faire une PictureBox avec des propriétés supplémentaires ?

[Résolu]
Signaler
Messages postés
4
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
11 mars 2006
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
Comment faire une PictureBox avec des propriétés supplémantaires ?

Je suis débutant et je m'interroge

Je fais des picturebox avec Picture que je drag drop sur une autre picturebox vide sur laquelle je récupére la Picture de la source :

Private Sub Picture1_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single)
Picture1.Item(Index).Picture = Source.Picture
End Sub

Mais à chaque PictureBox je veux associer des infos en plus (des propriétés supplémentaires) comme du texte etc. (Je peux pas utiliser .Tag car besoin de plusieurs propriétés)
J'ai essayé de créer un usercontrol avec ce que j'ai besoin + Picture mais là mon code ci-dessus ne fonctionne plus : monusercontrol1.Picture = LoadPicture("img.gif") me dit "Utilisation incorrecte de la propriété".
J'ai essayé d'associer un nouvelle classe d'objet avec mes propriétés à mes PictureBox mais je ne sais pas comment faire pour la méthode .Item : MonObjet.Item(Index).Picture = Source.Picture ->Comprend pas Item

Qui peux m'aider ? Please

6 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
en effet, çà ne fonctionne pas comme çà.



on attache un objet, pas le fonctionnement d'un objet.

ta vraie picturebox doit exister.

ensuite tu l'attaches, et enfin tu gères uniquement la classe, sans oublier de la détruire proprement.



je n'ai pas d'exemple tout-fait non, mais voici rapidement en reprenant ton exemple en VB6 bien sûr ;)



Form1 contient une Picture1

pour les évènements, j'en ai géré 5. tu verras facilement comment tous les renvoyer...






'------------

' Form1.frm

'------------

'

'

Option Explicit

'

Private WithEvents cPicBox As MaClasse

'

'

Private Sub Form_Load()

' form pour position souris

Me.AutoRedraw = True



' init classe

Set cPicBox = New MaClasse



' attache objet

Set cPicBox.Picture = Picture1



' load image dans la classe

cPicBox.Picture.Picture = LoadPicture ("C:\tmp.jpg")



' prop perso

cPicBox.Maprop = "cool ;)"

End Sub

'

'

Private Sub Form_Unload(Cancel As Integer)

' détruit instance

Set cPicBox = Nothing

End Sub

'

'

Private Sub cPicBox_Click()

' click renvoyé par la classe

MsgBox "image clické, la valeur suplémentaire est : '" & cPicBox.Maprop & "'"

End Sub

'

'

Private Sub cPicBox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

' mouse move renvoyé par la classe

Me.Cls

Me.Print "X " & X & " Y " & Y

End Sub











'---------------

' MaClasse.cls

'---------------

'

'

Option Explicit

'

Private mvarMaprop As String 'propriété ajoutée

Private mvarMapropType As String 'propriété ajoutée

'

Private WithEvents mvarPicture As PictureBox 'objet réel

'

'

Public Event Click()

Public Event DblClick()

Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Public Event Paint()

Public Event Resize()

'

'

Public Property Get Picture() As PictureBox

Set Picture = mvarPicture

End Property

Public Property Set Picture(ByVal vData As PictureBox)

Set mvarPicture = vData

End Property

'

'

Public Property Get MapropType() As String

MapropType = mvarMapropType

End Property

Public Property Let MapropType(ByVal vData As String)

mvarMapropType = vData

End Property

'

'

Public Property Get Maprop() As String

Maprop = mvarMaprop

End Property

Public Property Let Maprop(ByVal vData As String)

mvarMaprop = vData

End Property

'

'

'

Private Sub Class_Terminate()

Set mvarPicture = Nothing

End Sub

'

'

'

Private Sub mvarPicture_Change()

'

End Sub

Private Sub mvarPicture_Click()

RaiseEvent Click

End Sub

Private Sub mvarPicture_DblClick()

RaiseEvent DblClick

End Sub

Private Sub mvarPicture_DragDrop(Source As Control, X As Single, Y As Single)

'

End Sub

Private Sub mvarPicture_DragOver(Source As Control, X As Single, Y As Single, State As Integer)

'

End Sub

Private Sub mvarPicture_GotFocus()

'

End Sub

Private Sub mvarPicture_KeyDown(KeyCode As Integer, Shift As Integer)

'

End Sub

Private Sub mvarPicture_KeyPress(KeyAscii As Integer)

'

End Sub

Private Sub mvarPicture_KeyUp(KeyCode As Integer, Shift As Integer)

'

End Sub

Private Sub mvarPicture_LinkClose()

'

End Sub

Private Sub mvarPicture_LinkError(LinkErr As Integer)

'

End Sub

Private Sub mvarPicture_LinkNotify()

'

End Sub

Private Sub mvarPicture_LinkOpen(Cancel As Integer)

'

End Sub

Private Sub mvarPicture_LostFocus()

'

End Sub

Private Sub mvarPicture_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'

End Sub

Private Sub mvarPicture_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

RaiseEvent MouseMove(Button, Shift, X, Y)

End Sub

Private Sub mvarPicture_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

'

End Sub

Private Sub mvarPicture_OLECompleteDrag(Effect As Long)

'

End Sub

Private Sub mvarPicture_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

'

End Sub

Private Sub mvarPicture_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)

'

End Sub

Private Sub mvarPicture_OLEGiveFeedback(Effect As Long, DefaultCursors As Boolean)

'

End Sub

Private Sub mvarPicture_OLESetData(Data As DataObject, DataFormat As Integer)

'

End Sub

Private Sub mvarPicture_OLEStartDrag(Data As DataObject, AllowedEffects As Long)

'

End Sub

Private Sub mvarPicture_Paint()

RaiseEvent Paint

End Sub

Private Sub mvarPicture_Resize()

RaiseEvent Resize

End Sub

Private Sub mvarPicture_Validate(Cancel As Boolean)

'

End Sub




<small> Coloration
syntaxique automatique [AFCK]</small>



attention aux courbettes douloureuses



PCPT [AFCK]
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 112 internautes nous ont dit merci ce mois-ci

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,

si il y a une erreur tant avec le usercontrol qu'avec la classe, c'est
que c'est tes propriétés get/let/set qui ne sont pas assimilées.



la classe est la méthode la plus simple.

un objet withevents de picturebox, tes propriétés, et c'est tout ;)
Messages postés
4
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
11 mars 2006

Salut et merci pour la réponse ... mais je comprends que dalle. Je m'excuse mais je débute en VB. Si tu avais un exemple je serai obligé de faire quelques courbettes devant mon écran !

Voilà ce que j'ai fait comme classe : Maclasse

Private mvarMaprop As String 'copie locale
Private mvarMapropType As String 'copie locale
Private WithEvents mvarPicture As PictureBox 'copie locale

Public Property Let Picture(ByVal vData As PictureBox)
mvarPicture = vData
End Property

Public Property Get Picture() As PictureBox
Picture = mvarPicture
End Property


Public Property Let MapropType(ByVal vData As String)
mvarMapropType = vData
End Property


Public Property Get MapropType() As String
MapropType = mvarMapropType
End Property


Public Property Let Maprop(ByVal vData As String)
mvarMaprop = vData
End Property


Public Property Get Maprop() As String
Maprop = mvarMaprop
End Property

Mais quand je fais : MaClasse1.Picture = LoadPicture(App.Path & "\test\1.gif") j'ai "Utilisation incorrecte de la propriété".

Merci de votre aide et de votre patience
Messages postés
4
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
11 mars 2006

Merci beaucoup,

Je fais pleins de courbettes devant mon PC (si, si je te jure ;-)

Maintenant il me reste à récupérer, lors d'un DragDrop, les propriétés de cPicBox1 sur cPicBox2

Je m'y mets (enfin j'essaye !!!)
Messages postés
4
Date d'inscription
lundi 20 juin 2005
Statut
Membre
Dernière intervention
11 mars 2006

C'est remoi

j'ai fait ça :

Private Sub cPicBox2_DragDrop(Source As Control, X As Single, Y As Single) cPicBox2.Picture.Picture Source.Picture 'Le DragDrop de Picture fonctionne (mais je deduis que Source c'est Picture1 car si c'était 'cPicBox1 j'aurai dû écrire cPicBox2.Picture.Picture Source.Picture.Picture)

cPicBox2.Maprop = Source.Maprop 'forcement ça marche pas car Picture1 ne connait pas Maprop !

End Sub

Y a t'il une astuce à mettre en oeuvre ?

Merci encore
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
dans la classe j'ajoute :

Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)



et donc en conséquence :

Private Sub mvarPicture_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

RaiseEvent MouseDown(Button, Shift, X, Y)

End Sub



et dans la form :

Private Sub cPicBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

cPicBox.Picture.DragIcon = Me.Icon

cPicBox.Picture.Drag vbBeginDrag

End Sub



Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

Source.Move (X - Source.Width / 2), (Y - Source.Height / 2)

End Sub



espérant que çà t'aide.

pour plus d'infos sur le Drag&Drop, voir mon tuto LES VACANCES DE MR MULOT