Я новичок в мероприятиях, поэтому будьте нежны. В основном я пытаюсь нарисовать .gif на картинке и добавить его в панель flowlayout. Причина этого в том, что gif продолжает цикл, если я не учитываю фреймы и рисую их.Hookup new Picture Paint Paint Event
В принципе, я создал изображение в одном классе, и я хочу подключить событие рисования, и при запуске класса в классе основной формы произойдет пожароопасное событие. Возможно, я делаю это неправильно, может быть, это не лучшая практика, или, может быть, кто-то может предложить лучший способ сделать это. В настоящее время, когда я называю форму класса основной формой, переменные класса проходят, но я никогда не вижу, чтобы на картинке, на которой я объявлял «withevents», наступил шаг. Кроме того, событие Paint никогда не входит в это. Пожалуйста, смотрите мой код ниже
Public Class CompleteMark
Implements IDisposable
Dim WithEvents _picBox As PictureBox
#Region "VARIABLES"
'Disposable variables
Private managedResource As System.ComponentModel.Component
Private unmanagedResource As IntPtr
Protected disposed As Boolean = False
'Class Variables
Dim _cm As New Bitmap(My.Resources.cmt)
Dim _currentlyAnimating As Boolean = False
Dim _frameCounter As Integer = 0
Dim _frameCount As Integer
Dim _frameDim As Imaging.FrameDimension
'_picBox = New PictureBox()
#End Region
Sub New(ByVal flp As FlowLayoutPanel)
_picBox = New PictureBox()
_picBox.Size = New Size(14, 13)
_picBox.Margin = New Padding(0, 0, 0, 0)
_picBox.Name = "AnimCheckMark"
_picBox.Image = _cm
flp.Controls.Add(_picBox)
_picBox.Invalidate()
'AddHandler _picBox.Paint, AddressOf AnimCheckMark_Paint
End Sub
Private Sub OnFrameChanged(ByVal o As Object, ByVal e As EventArgs)
_picBox.Invalidate()
End Sub
Private Sub AnimateImage()
If Not _currentlyAnimating Then
ImageAnimator.Animate(_cm, New EventHandler(AddressOf OnFrameChanged))
_currentlyAnimating = True
End If
End Sub
Private Sub AnimCheckMark_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles _picBox.Paint
_frameDim = New Imaging.FrameDimension(_cm.FrameDimensionsList(0))
_frameCount = _cm.GetFrameCount(_frameDim)
If _frameCounter < _frameCount Then
AnimateImage()
ImageAnimator.UpdateFrames()
e.Graphics.DrawImage(_cm, New Point(0, 0))
_frameCounter += 1
End If
End Sub
#Region " IDisposable Support "
Protected Overridable Overloads Sub Dispose(
ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
managedResource.Dispose()
End If
' Add code here to release the unmanaged resource.
unmanagedResource = IntPtr.Zero
' Note that this is not thread safe.
End If
Me.disposed = True
End Sub
Public Sub AnyOtherMethods()
If Me.disposed Then
Throw New ObjectDisposedException(Me.GetType().ToString,
"This object has been disposed.")
End If
End Sub
' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Boolean).
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class
Тогда я новый этот класс с тестовой кнопкой на главной форме:
Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click
Dim chkMark As CompleteMark
chkMark = New CompleteMark(flpAdobeLbl)
End Sub
PictureBox создается в форме и .gif не появится, но без анимации. Может быть, я что-то упустил.