Upřímně, jen málo projektů úvodní okno opravdu potřebuje, protože načtení a zpracování zdrojů netrvá většinou tak dlouho, aby měl uživatel čas číst si logovací údaje a obdivovat práci Vašeho grafika nebo Vaší. SplashScreen navržený pouze z estetických důvodů vypadá takto:
' v nastavení projektu určeno jako spouštěcí formulář
Public Class SplashForm
Public Sub SplashForm_Load() Handles Me.Load
' vytvoříme instanci hlavního formuláře
With New MainForm()
AddHandler .Shown, Sub() Me.Hide() ' schovat při zobrazení MainForm
.Show()
End With
End Sub
End Class
Public Class MainForm
End Class
SplashForm a MainForm jsou samozřejmě dva různé soubory pro přehlednost. Zde načrtám pouze zobrazení MainFormu SplashFormem. UI SplashFormu je mnohem benevolentnější než u klasického formuláře, který opravdu něco dělá. Jinými slovy je pouze na Vás, jaký dojem chcete na zákazníka udělat při spouštění aplikace. Dojem z tohoto SplashFormu by byl pravděpodobně velmi zmatený, protože pouze velmi rychle problikne. Možná by stálo za to zobrazit hlavní formulář až např. za 5 sekund a i SplashScreen zobrazovat s Opacity=0 a postupně se dostat na hodnotu 1 a tím vytvořit plynulou animaci objevení se a vice-versa při zavírání SplashForm. Nezapomeňte na to, že SplashScreen je z pohledu assembly hlavním formulářem aplikace! Ve výchozím nastavení se aplikace zavírá s ukončením hlavního formulář, ne posledního formuláře, takže je třeba v hlavním formuláři (z hlediska aplikace) zavřít schovaný SplashForm, jinak aplikace nebude vidět v liště spuštěných programů, ale pořád poběží. Druhou možností je nastavit projekt tak, aby se vypínal s posledním oknem(opět záložka s nastavením projektu), ale to má svá úskalí v některých scénářích.
Public Class SplashForm
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
Me.Opacity = 0 ' nastavit už v konstruktoru, aby nedošlo k probliknutí
End Sub()
Public Sub SplashForm_Load() Handles Me.Load
Dim ticks = 0
Dim interval = 50 'ms
Dim second = 1000 \ interval
Dim amount = interval / 1000
Dim mainForm As New MainForm()
Dim timer As New Timer() With {.Interval = interval, .Enabled = True}
AddHandler mainForm.Shown, AddressOf timer.Stop
AddHandler mainForm.FormClosed, AddressOf Me.Close
AddHandler timer.Tick, Sub()
ticks += 1
Select Case ticks
Case 0 To second
Me.Opacity += amount
Case 4 * second To 5 * second
Me.Opacity -= amount
Case Is > 5 * second
mainForm.Show()
Me.Hide()
End Select
End Sub
End Sub
End Class
Tento kód se postará o trochu jemnější zobrazení SplashFormu. Pokud přijde ke slovu zpracování dat, můžete ho nechat v konstruktoru MainForm a použít něco jako tohle: (do SplashForm_Load)
Dim ticks = 0
Dim interval = 25 'ms
Dim second = 1000 \ interval ' ticks/sec.
Dim opacityCoefficient = interval / 1000 ' opacity in-/decrement
Dim mainForm As New MainForm() With {.Opacity = 0} ' opacity proti probklinutí
Dim timer As New Timer() With {.Interval = interval, .Enabled = True}
Dim loaded = False
AddHandler timer.Tick, Sub()
ticks += 1
Me.Opacity += If(loaded, -opacityCoefficient, opacityCoefficient)
If ticks = second Then
If Not loaded Then mainForm.Show()
timer.Enabled = False
End If
End Sub
AddHandler mainForm.Shown, Sub()
mainForm.Opacity = 1
mainForm.Focus()
ticks = 0
loaded = True
timer.Enabled = True
End Sub
AddHandler mainForm.FormClosed, AddressOf Me.Close
Toto jemně zobrazí SplashForm, počká na zobrazení MainForm (tzn. i provedení konstruktoru a Load metody - zpracování dat) a pak jemně schová SplashForm.
|