Winform Splash Screen - VB.NET - Таймер - PullRequest
7 голосов
/ 25 января 2012

У меня есть заставка в приложении и в этой форме. У меня есть таймер.

Private Sub Splash_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

   SplashTimer.Start()

   ' Set application title
   ' Set Version
 Me.Show()
        'Me.Refresh()
        'System.Threading.Thread.Sleep(2000)
        'Login.ShowDialog()
        'Login.AllowTransparency = True
  End Sub

Интервал на таймере установлен на 5000.

  Private Sub SplashTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SplashTimer.Tick
        SplashTimer.Stop()
        Login.Show()
        Login.AllowTransparency = True
        Me.Hide()
    End Sub

Я установил здесь точку останова, но, похоже, она не достигает этой точки останова. Я раскомментировал Me.Refresh ()

Заставка закрывается. Затем Логин отображается с кнопкой продолжения. Когда вы нажимаете продолжить кнопка

MainMenu.Show() 'this form should be shown as this is the main window of the application but it's not showing.
            Me.Close() 'closes login window

Окно не отображается, а приложение зависает. Будем благодарны за любые материалы.

Ответы [ 3 ]

15 голосов
/ 25 января 2012

Я бы предложил использовать встроенный экран-заставку, предоставляемый Visual Studio:

Перейдите в меню «Проекты», выберите «Добавить форму Windows» и выберите шаблон экрана-заставки:

enter image description here

Затем в настройках приложения проекта выберите эту форму для экрана-заставки:

enter image description here

Ваша стартовая форма должна быть вашим логиномформа, а не заставка.

Обновление:

Нажмите кнопку «Просмотр событий приложения» на последнем изображении на экране приложения «Мой проект» и добавьте этокод для установки значения MinimumSplashScreenDisplayTime :

Imports System.Collections.ObjectModel

Namespace My
  Partial Friend Class MyApplication
    Protected Overrides Function OnInitialize(commandLineArgs As ReadOnlyCollection(Of String)) As Boolean
      Me.MinimumSplashScreenDisplayTime = 5000
      Return MyBase.OnInitialize(commandLineArgs)
    End Function
  End Class
End Namespace

Заставка будет отображаться на экране в течение 5000 миллисекунд или 5 секунд.

3 голосов
/ 25 января 2012

Попробуйте добавить модуль в вашу программу с помощью метода Public Sub Main.Установите параметры запуска проекта на Sub Main.Затем вы можете сделать что-то вроде:

Module Module1
    Dim frmSplash As SplashScreen1
    Dim frmLogin As Login
    Dim frmMain As MainMenu
    Dim splashTimer As Timer

    Public Sub Main()
        splashTimer = New Timer()
        AddHandler splashTimer.Tick, AddressOf TimerTick
        splashTimer.Interval = 5000
        splashTimer.Start()
        frmSplash = New SplashScreen1
        frmSplash.ShowDialog()

        frmLogin = New Login
        Dim result As DialogResult = frmLogin.ShowDialog
        If result <> DialogResult.OK Then
            End
        End If

        frmMain = New MainMenu
        frmMain.ShowDialog()

    End Sub
    Private Sub TimerTick(sender As Object, e As EventArgs)
        splashTimer.Stop()
        frmSplash.Close()
    End Sub
End Module

Настройки проекта:

0 голосов
/ 11 июля 2014

Я обнаружил, что события таймера не запускаются до тех пор, пока не будет завершено событие / метод загрузки. Я помещаю thread.sleep в активированное событие / метод, и он дает мне желаемый результат. Поэтому я пытаюсь показать заставку с несколькими различными фоновыми изображениями, и это прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...