Делаю прогу со сложной графикой и анимацией. Раз есть анимация, значит надо двигать контролы. В принцыпе с этим проблем нет, когда передвинуть надо одну или две кнопки, а если их 10? или 20? Получается слишком много кода. Решение есть - Panel, однако здесь появляется другая проблема - Panel с BackColor=Transparent оооооочень тормозит при перерисовке сложной анимации. Я подумал, что надо бы сделать панель без прорисовки - "виртуальную". Моей больной фантазии хватило только на это:
Public Class VirtualPanel
Private Structure psc
Dim Control As Control
Dim DefaultLocation As Point
Public Sub New(ByVal Control As Control, ByVal Loc As Point)
Control = Control
DefaultLocation = Loc
End Sub
End Structure
Dim Controls As ArrayList = New ArrayList
Dim vis, en As Boolean
Public Property Visible() As Boolean
Get
Return vis
End Get
Set(ByVal value As Boolean)
If vis And Not value Then
vis = value
Hide()
ElseIf Not vis And value Then
vis = value
Show()
End If
End Set
End Property
Public Sub AddControl(ByRef c As Control, ByVal DefLoc As Point)
Controls.Add(New psc(c, DefLoc))
End Sub
Public Sub Move(ByVal x As Integer, ByVal y As Integer)
For Each c As psc In Controls
With c.Control
.Left += x
.Top += y
End With
Next
End Sub
Public Sub Hide()
For Each c As psc In Controls
With c.Control
.Visible = False
End With
Next
vis = False
End Sub
Public Sub Show()
For Each c As psc In Controls
With c.Control
.Visible = True
End With
Next
vis = True
End Sub
End Class
Однако VS ругается, типа ссылка на объект не установлена. Так вот, хочется узнать: может зря я парюсь? может это уже предусмотрено стандартными методами (ведь все знать не реально, вот я все и не знаю)? И если нет, то как правильно воплатить идею в жизнь, как правильно добавить ссылку контрол в массив, чтобы потом на него можно было сослаться?
Ответить
|