我创建了一个继承计时器类的类,因为我想自定义Tick函数,并且希望在许多类中使用此特定函数,而不必每次都更改所有计时器中的函数。
{{1}}
此功能的目的是在创建表单时进行简单的淡入。问题是我不能使用“我”。因为我在Timer类中,所以如何从此类中更改表单。
答案 0 :(得分:2)
第一件事是在自定义计时器的构造函数中传递要淡入的表单实例,将该实例保存在全局类变量中,并使用 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