Первое, что нужно сделать, - это передать экземпляр формы, который должен исчезнуть, внутри конструктора пользовательского таймера, сохранить этот экземпляр в глобальной переменной класса и добавить обработчик тиков с помощью AddHandler , какпоэтому
Public Class FadeInTimer
Inherits System.Windows.Forms.Timer
Dim parent As Form
Public Sub New(p As Form)
MyBase.New()
parent = p
AddHandler MyBase.Tick, AddressOf FadeInTimer_Tick
End Sub
Теперь, когда вам нужно обратиться к «родительской» форме, вы используете переменную parent , а не оператор Me .Кроме того, каждый раз, когда вам нужно обратиться к таймеру, вы должны использовать MyBase выражение
Private Sub FadeInTimer_Tick(sender As Object, e As EventArgs)
Dim workingAreaWidth As Integer = Screen.PrimaryScreen.WorkingArea.Width - Parent.Width
parent.Opacity += 0.1
If Not parent.Location.X <= workingAreaWidth Then
parent.Location = New Point(parent.Location.X - 30, parent.Location.Y)
End If
parent.Refresh()
If parent.Opacity = 1 Then
MyBase.Stop()
End If
End Sub
Это можно проверить в LinqPad с помощью этого кода
Sub Main
Dim f As Form = New Form()
Dim t As FadeInTimer = New FadeInTimer(f)
f.Opacity = 0
t.Interval = 150
t.Start()
f.ShowDialog()
End Sub