我制作一个淡入淡出的表单,然后淡出并加载另一个表单。 当新表单加载时,它会关闭启动表单。
问题是当它关闭这个启动形式时它会杀死我的应用程序。
Public Class Splash
Dim appearance As Boolean = False
Private Sub Splash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Opacity = 0
FadeIn.Start()
End Sub
Private Sub FadeIn_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FadeIn.Tick
If Not appearance Then
Opacity += 0.015
End If
If Opacity = 1 Then
appearance = True
End If
If appearance = True Then
Opacity -= 0.015
If Opacity = 0 Then
Form1.Show()
End If
End If
End Sub
End Class
Public Class Form1
Private Function WebLoad()
While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
Application.DoEvents()
End While
Return 0
End Function
Private Function Login(ByVal User As String, ByVal Pass As String)
WebBrowser1.Navigate("http://caan/SC5/SC_Login/aspx/login_launch.aspx?SOURCE=ESOLBRANCHLIVE")
WebLoad()
WebBrowser1.Document.GetElementById("txtUserName").SetAttribute("value", User)
WebBrowser1.Document.GetElementById("txtPassword").SetAttribute("value", Pass)
Dim allImgTags As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("img")
If allImgTags IsNot Nothing Then
For Each img As HtmlElement In allImgTags
If img.GetAttribute("src").Contains("/images/SC5Login07.jpg") Then
img.InvokeMember("Click")
Exit For
End If
Next img
End If
Return 0
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Login(user, pass)
WebBrowser2.Navigate("http://caan/SC5/SC_PartsCentre/aspx/partscentre_frameset.aspx")
WebBrowser1.Navigate("http://caan/SC5/SC_RepairJob/aspx/RepairJob_frameset.aspx")
Splash.Close()
End Sub
End Class
我知道有一个propper启动画面形式,但它不会保持打开足够长的时间。在它的淡出时,它会关闭并启动我的应用程序
我的主要问题是如何阻止splash.close()关闭整个应用程序?
的应答 的
现在对此进行排序,不要让我回答这个问题......
用于在visualbasic express中提供的splashscreen,并在msdn上添加了几行到Application Events
ApplicationEvents
Namespace My
' The following events are available for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Protected Overrides Function OnInitialize( _
ByVal commandLineArgs As _
System.Collections.ObjectModel.ReadOnlyCollection(Of String)) As Boolean
Me.MinimumSplashScreenDisplayTime = 7000
Return MyBase.OnInitialize(commandLineArgs)
End Function
End Class
End Namespace
的 SplashScreen1.VB 的
Public NotInheritable Class SplashScreen1
Dim appearance As Boolean = False
Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If My.Application.Info.Title <> "" Then
ApplicationTitle.Text = My.Application.Info.Title
Else
ApplicationTitle.Text = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName)
End If
Version.Text = System.String.Format(Version.Text, My.Application.Info.Version.Major, My.Application.Info.Version.Minor)
Copyright.Text = My.Application.Info.Copyright
Opacity = 0
Fade.Start()
End Sub
Private Sub MainLayoutPanel_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MainLayoutPanel.Paint
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Fade.Tick
Fade.Interval = 100
If Not appearance Then
Opacity += 0.1
End If
If appearance = True Then
Opacity -= 0.1
End If
If Opacity = 1 Then
Fade.Interval = 5000
appearance = True
End If
End Sub
End Class
答案 0 :(得分:4)
您应该检查项目的应用页面中的Shutdown mode option
http://msdn.microsoft.com/en-us/library/tzdks800(v=vs.90).aspx并告诉我们Shutdown mode
和Startup form
的价值。
我猜Shutdown mode
设置为When startup form closes
,Startup form
设置为Splash
。
在这种情况下,请尝试将Shutdown mode
设置为On last window close
,它应该可以解决您的问题。
答案 1 :(得分:0)
默认情况下,如果“启动表单”花费的时间超过“加载”的时间,则启动画面会保持打开状态两秒或更长时间。
因此,为了让您的启动画面保持打开状态,无论您需要多长时间,只需阻止加载主窗体,直到发出信号为止。一种方法是使用ManualResetEvent。
在此设置中,“启动表单”为Form1
,“启动画面”为Splash
,“关闭模式”为When startup form closes
。
在Splash中,我添加了一个Shared ManualResetEvent,并且仅在表单完成动画时发出信号:
Public Class Splash
Private appearance As Boolean = False
Public Shared MRE As New System.Threading.ManualResetEvent(False)
Private Sub Splash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Opacity = 0
FadeIn.Start()
End Sub
Private Sub FadeIn_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FadeIn.Tick
If Not appearance Then
Opacity += 0.015
Else
Opacity -= 0.015
End If
If Opacity = 1 Then
appearance = True
ElseIf Opacity = 0 Then
MRE.Set()
End If
End Sub
End Class
现在,在Form1中,我们针对Shared ManualResetEvent调用WaitOne():
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim MySplash As Splash = DirectCast(My.Application.SplashScreen, Splash)
Splash.MRE.WaitOne() ' wait for the splash to signal
' ... other code ...
End Sub
End Class
现在Form1将不会出现,直到启动屏幕完成动画,和应用程序将正确地将Form1作为“启动窗体”,因此当关闭启动并且Form1打开时它不会关闭。另请注意,我们未明确打开或关闭代码中的任何表单;这是由框架本身自动完成的。
使用此方法,在启动闪屏完成之前,主窗体不会打开。此外,如果您更改动画长度,则无需进入并更改MinimumSplashScreenDisplayTime(),因为不涉及猜测。