初始屏幕问题

初始屏幕问题

问题描述:

我在VB.Net中编写了一个启动屏幕,显示3秒钟,然后显示登录屏幕。但即使登录显示并且我已经告诉飞溅隐藏,飞溅也会显示出来。这里是我的代码:初始屏幕问题

Public Class frmSplash 

    Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Me.Show() 
     System.Threading.Thread.Sleep(3000) 
     Me.Hide() 
     frmLogin.Show() 
    End Sub 
End Class 
+1

为什么你想这样做?对于最终用户来说,只要程序启动,没有比毫无意义的三秒钟等待更让人讨厌的事了。如果您在后台加载程序的其余部分,则只应显示启动画面。 – SLaks 2009-12-20 17:41:35

+0

在某些程序中,启动画面是信息性的,它可能会提醒用户程序版本,程序的创建者或其他有用的信息。但我同意,如果你为了展示它而展示它,那么它有点毫无意义。 – Cyclone 2009-12-20 17:44:53

+0

这是关于对话框的用途。 – SLaks 2009-12-20 17:45:26

在UI线程中调用Thread.Sleep会冻结你的程序。

另外,Load事件在表单显示之前触发,因此您在首先显示表单之前调用Hide

你需要一个Timer组件添加到窗体,设置其Interval3000,并在其Tick事件致电Close。然后,以形式Shown事件调用计时器的Start方法。

+0

这是我的理解,如果您在Load事件中放置'.Show',它将在加载事件结束之前显示。但是,如果提问者使用'Shown'事件,或者在显示表单之后触发它,则可能会更好。 – Abel 2009-12-20 17:37:26

+0

你有一点。但是,在'Sleep'调用期间不会处理Windows消息,因此表单不会被绘制,并且可能根本不可见。 – SLaks 2009-12-20 17:39:52

+0

或者,使用Application.DoEvents()可以工作,如果可以让它在暂停时触发。 – Cyclone 2009-12-20 17:47:08

您的sleep语句冻结了您的UI,请尝试从另一个线程运行它。

+0

这里要做的正确的事情是使用WinForms计时器;它会比创建线程更有效率。 – SLaks 2009-12-20 17:40:31

+0

我将如何使用计时器来做到这一点? – 2009-12-20 17:41:13

+0

@Mark:看到我的回答。 – SLaks 2009-12-20 17:42:05

谢谢你们!这工作: 公共类frmSplash

Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    SplashTimer.Start() 
End Sub 

Private Sub SplashTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SplashTimer.Tick 
    SplashTimer.Stop() 
    frmLogin.Show() 
    Me.Hide() 
End Sub 
End Class