Private _pict As PictureBox
Public Class myPictureBox Inherits PictureBox Private _pict As PictureBox Public Sub New() AddHandler me.MouseDown, AddressOf mpbMouseDown AddHandler me.MouseMove, AddressOf mpbMouseMove End Sub ...etc...
Public Class MyPictureBoxDemo 'Private pict As myPictureBox Private WithEvents pict As myPictureBox Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' ADD ONE DYNAMIC PICTUREBOX Dim pict As New myPictureBox pict.Location = New Point(100, 100) pict.Size = New Size(1200, 800) pict.Image = My.Resources.Koala pict.SizeMode = PictureBoxSizeMode.StretchImage Me.Controls.Add(pict) End Sub End Class
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOK, je crois que je vais laisser de cote ma classe pour l'instant, car elle doit etre plein d'erreur.
quels controls ?
Option Strict On Public Class Form1 'déclaration et instanciation de la classe Dim MyPictureBox As New clsMyPictureBox 'label devant afficher des informations issues d'un événement perso de MyPictureBox Dim MonLabel As New Label With {.Location New Point(5, 60), .Font New Font("Arial", 22), .AutoSize = True} Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'abonnement à mon événement de mon picturebox AddHandler MyPictureBox.Progress, AddressOf MyPictureBox_Progress 'ajout des contrôles au formulaire Me.Controls.AddRange({MyPictureBox, MonLabel}) 'démarrage d'une commande sur mon picturebox MyPictureBox.Start() End Sub Private Sub MyPictureBox_Progress(ByVal sender As Object, ByVal e As clsMyPictureBox.ProgressArgs) 'affichage de la progression récupéré sur le paramètre e (voir classe ProgressArgs plus bas) MonLabel.Text = e.X.ToString End Sub End Class Public Class clsMyPictureBox Inherits PictureBox 'déclaration d'un événement personnalisé Event Progress(ByVal sender As Object, ByVal e As ProgressArgs) 'ici nous devrons gérer des opérations inter-thread à cause du timer 'on doit donc intégrer un délégué Delegate Sub DelegateTimer(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) 'déclaration d'un timer Dim MonTimer As New Timers.Timer(100) Dim i As Integer = 0 Sub New() 'j'abonne mon timer à un événement AddHandler MonTimer.Elapsed, AddressOf MonTimer_Elapsed 'je dimensionne mon picturebox Me.Width = 102 End Sub Sub Start() 'je démarre le timer MonTimer.Start() End Sub Private Sub MonTimer_Elapsed(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs) 'nous devons tester si l'invocation du délégué est nécéssaire 'je lui fournis l'objet sender et l'argument e en paramètre If Me.InvokeRequired Then Me.Invoke(New DelegateTimer(AddressOf MonTimer_Elapsed), sender, e) Else i += 1 'ici je déclenche l'événement en fournissant un paramètre (i) 'à une nouvelle instance de la classe d'argument ProgressArg (voir plus bas) RaiseEvent Progress(Me, New ProgressArgs(i)) 'dessins graphiques sur le picturebox Me.CreateGraphics.FillRectangle(Brushes.SteelBlue, New Rectangle(0, 0, 100, 25)) Me.CreateGraphics.FillRectangle(Brushes.Blue, New Rectangle(0, 0, i, 25)) Me.CreateGraphics.DrawString(i.ToString & " %", New Font("Arial", 10), Brushes.White, New Point(40, 3)) Me.CreateGraphics.DrawRectangle(Pens.Black, New Rectangle(0, 0, 100, 25)) If i >= 100 Then MonTimer.Stop() End If End Sub 'classe d'argument d'événement Public Class ProgressArgs 'elle hérite de EventArgs (ceci pour avoir access aux méthodes et fonction 'd'un argument d'événement standard ) Inherits EventArgs Dim _x As Integer 'on fourni la donnée dans le constructeur Sub New(ByVal x As Integer) _x = x End Sub 'elle est accessible par sa propriété ReadOnly Property X As Integer Get Return _x End Get End Property End Class End Class
Me.Controls.AddRange(New Control() {MyPictureBox, MonLabel})