从自定义计时器类更改表单不透明度

时间:2018-11-25 13:11:16

标签: vb.net winforms

我创建了一个继承计时器类的类,因为我想自定义Tick函数,并且希望在许多类中使用此特定函数,而不必每次都更改所有计时器中的函数。

{{1}}

此功能的目的是在创建表单时进行简单的淡入。问题是我不能使用“我”。因为我在Timer类中,所以如何从此类中更改表单。

1 个答案:

答案 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