none
Fenster (graduell) ausblenden lassen RRS feed

  • Frage

  • Hallo,

    ich möchte ein Fenster graduell ausblenden lassen. Also habe ich einen Timer genommen und nach jedem "Ticken" sinkt die Eigenschaft "Opacity" um 10 %. Nur leider funktioniert dies nicht mit meinem bisherigem Code:

    Public Class Form1
    
      Dim LoadApp As Integer = 1
      Dim showWindow As Integer = 0
      Dim wOpacity As Integer = 1
    
    
    
      Private Sub Timer1_LoadApp_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1_LoadApp.Tick
        If LoadApp = 1 Then
          lblLoadApp.Text = "Anwendung wird geladen"
          LoadApp = LoadApp + 1
        ElseIf LoadApp = 2 Then
          lblLoadApp.Text = lblLoadApp.Text & "."
          LoadApp = LoadApp + 1
        ElseIf LoadApp = 3 Then
          lblLoadApp.Text = lblLoadApp.Text & "."
          LoadApp = LoadApp + 1
        ElseIf LoadApp = 4 Then
          lblLoadApp.Text = lblLoadApp.Text & "."
          LoadApp = 1
        Else
          LoadApp = 1
        End If
    
      End Sub
    
      Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1_LoadApp.Start()
        tmr_ShowWindow.Start()
      End Sub
    
      Private Sub tmr_ShowWindow_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_ShowWindow.Tick
        If showWindow = 5 Then
          tmr_opacity.Start()
          tmr_ShowWindow.Stop()
        Else
          showWindow = showWindow + 1
        End If
      End Sub
    
      Private Sub tmr_opacity_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_opacity.Tick
        If wOpacity = 1 Then
          Me.Opacity = 1.0
          wOpacity = +1
        ElseIf wOpacity = 2 Then
          Me.Opacity = 0.9
          wOpacity = +1
        ElseIf wOpacity = 3 Then
          Me.Opacity = 0.8
          wOpacity = +1
        ElseIf wOpacity = 3 Then
          Me.Opacity = 0.7
          wOpacity = +1
        ElseIf wOpacity = 4 Then
          Me.Opacity = 0.6
          wOpacity = +1
        ElseIf wOpacity = 5 Then
          Me.Opacity = 0.5
          wOpacity = +1
        ElseIf wOpacity = 6 Then
          Me.Opacity = 0.4
          wOpacity = +1
        ElseIf wOpacity = 7 Then
          Me.Opacity = 0.3
          wOpacity = +1
        ElseIf wOpacity = 8 Then
          Me.Opacity = 0.2
          wOpacity = +1
        ElseIf wOpacity = 9 Then
          Me.Opacity = 0.1
          wOpacity = +1
        ElseIf wOpacity = 10 Then
          Me.Opacity = 0.0
          wOpacity = +1
        Else
          Me.Close()
    
        End If
      End Sub
    End Class
    

    (ab Zeile 33)

     

    Wenn ich das Programm ausführe, läuft das Programm einfach weiter, obwohl es ja eigentlich nach 5 Sekunden sich ausblenden sollte.

    Weiß vielleicht jemand, wo der Fehler ist, oder wie man das anders machen könnte?

    Björn

    Mittwoch, 13. Oktober 2010 12:19

Antworten

  • Hallo Björn,

    ich möchte ein Fenster graduell ausblenden lassen.

    Dein Ansatz schaut mir unnötig kompliziert aus. Hier mal eine einfache Variante, bei der das Fenster beim Laden langsam ein- wird und beim Schließen langsam ausgeblendet wird. Wichtig ist hier das Schließen durch den User abzufangen, damit auch Gelegenheit bleibt das Fenster auszublenden, wenn er das Fenster über die Schließen Schaltfläche (X) schließt. Sonst wird das Fenster gleich geschlossen ohne dass der Timer hier aktiv wird:

    Public Class Form1
    
     Private m_Loading As Boolean
     Private m_Unloading As Boolean
    
     Private Sub Form1_Load(ByVal sender As Object, _
                 ByVal e As System.EventArgs) Handles Me.Load
    
      m_Loading = True
      Me.Opacity = 0
      Timer1.Interval = 10
      Timer1.Enabled = True
     End Sub
    
    
     Private Sub Form1_FormClosing(ByVal sender As Object, _
                    ByVal e As System.Windows.Forms.FormClosingEventArgs _
                       ) Handles Me.FormClosing
    
      If e.CloseReason = CloseReason.UserClosing Then
       If Not m_Unloading Then
        e.Cancel = True
        Timer1.Enabled = True
       End If
      End If
     End Sub
    
     Private Sub Timer1_Tick(ByVal sender As System.Object, _
                 ByVal e As System.EventArgs) Handles Timer1.Tick
      If m_Loading Then
       If Me.Opacity >= 1 Then
        m_Loading = False
        Timer1.Enabled = False
       Else
        Me.Opacity += 0.05
       End If
    
      Else
       If Me.Opacity <= 0 Then
        m_Unloading = True
        Me.Close()
       Else
        Me.Opacity -= 0.05
       End If
      End If
     End Sub
    End Class
    
    

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    vb-faq.de
    Mittwoch, 13. Oktober 2010 13:03