cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012
-
2 juin 2009 à 16:45
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012
-
3 juin 2009 à 14:58
Bonjour,
J'ai développé un usercontrol en vb dot net
Dans ma form principale je fais :
Private colUControl As New List(Of UControl)
Ainsi j'ai bien ma collection de UControl
Ensuite, chaque UControl contiennent l'event clickMiddle
Public Event clickMiddle()
Et appel fait via un raiseEvent clickMiddle()
mon soucis est que j'aimerais sur ma feuille utiliser cet event et ce pour chaque UControl.
J'ai tester des choses du genre :
Private WithEvents colUControl As New List(Of UControl )
Private WithEvents UControl
....
Mais ma migration de VB6 à Dot net m'est un peu difficile
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 3 juin 2009 à 13:54
Dans ton UC (partie déclarative):
Public Event ClickMiddle (sender As Object, e As System.EventArgs)
Dans la procédure qui lance l'évenement ClickMiddle
RaiseEvent ClickMiddle (Me, New System.EventArgs)
Dans ton panel :
Dim uc As New cUserControl
AddHandler uc.ClickMiddle, AdressOf UCsClickMiddle
colUC.Add(uc)
colUC(colUC.Count - 1).Top = e.Y
colUC(colUC.Count - 1).Left = e.X
Panel.Controls.Add(colUC(colUC.Count - 1))
Dans ton form :
Private Sub UCsClickMiddle (sender As Object, e As System.EventArgs)
Dim UC As cUserControl = Sender'Récupère l'objet
Dim Index As Integer = Panel.Controls.IndexOf (UC) 'Récupère l'index dans la collection de ton panel si besoin est
End Sub
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 3 juin 2009 à 10:22
Bonjour Mayzz,
Je suis d'accord sur tes principes mais je ne peux pas mettre en place ces solutions !
J'ai du mal m'exprimer :
Si tu préfères, mes controls sont en dynamique via un clique sur un panel de ma main form [code behind de ma form]
Dim uc As New cUserControl
colUC.Add(uc )
colUC(colUC.Count - 1).Top = e.Y
colUC(colUC.Count - 1).Left = e.X
Panel.Controls.Add(colUC(colUC.Count - 1))
Tout simplement.
Ensuite j'ai mes event des déplacement et de redimension via :
Private Sub UC_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim NewLoc As New Point
Select Case e.Button
'--déplacement
Case Windows.Forms.MouseButtons.Left
NewLoc.X = Me.Location.X + (e.X - InitLocation.X)
NewLoc.Y = Me.Location.Y + (e.Y - InitLocation.Y)
Me.Location = NewLoc
......
End select
Et donc sur ma form principale, j'ai Private colEntite As New List(Of cEntite)
Qui est la collection de mes contrôles.
Et somme, je ne vois pas du tout comment réaliser le code que tu m'a fournit soit le problème est bien là !
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 3 juin 2009 à 14:42
Ah oui, heu... pour répondre à ta question c'est pour le Fun...
Non je plaisante, en fait c'est pour avoir un 'Standard' de procédure ainsi tu peu faire par exemple :
Dim uc As New cUserControl
AddHandler uc.ClickMiddle, AddressOf UCsClickMiddle
Dim btn As New Button
AddHandler btn.Click, AddressOf UCsClickMiddle
Les événements de deux types de contrôles différents déclanchement la même procédure, cela n'est possible que si le schema de paramètre est identique pour les deux contrôles, si tu essaye par exemple :
Dim uc As New cUserControl
AddHandler uc.ClickMiddle, AddressOf UCsClickMiddle
Dim btn As New Button
AddHandler btn.MouseMove, AddressOf UCsClickMiddle
cs_ABF
Messages postés227Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention26 avril 2012 3 juin 2009 à 14:58
Haaa le mec il pourris le site de com pour gagner du points Haha
Merci pour ces infos, la migration m'est difficile mais agréable sur le fait que grâce au framework, on gagne un temps de développement fou et que le code est plus performant étant donné que les APIs win sont appelées par les méthodes de framework.