2011-09-15 2 views
0

Bonjour les gars! J'ai une question dans VB.NET. Lors de la création et du test de mon interface graphique pour un écran de connexion pour afficher la page principale du système de paie, il y a ce problème.VB.NET: Problème avec plusieurs formulaires

L'écran de démarrage se charge normalement et le formulaire de connexion s'affiche. Je tape mon nom d'utilisateur et mot de passe (par exemple, Nom d'utilisateur: Admin, Mot de passe: 12345) et la connexion a réussi. Voici le problème: Lorsque le menu principal apparaît, l'écran de connexion apparaît de nouveau, ce qui est à ce moment, cet écran devrait être déjà fermé. Ai-je eu un problème avec l'utilisation de Afficher, Masquer et Fermer?

Voici mon code pour les trois formulaires.

A. Splash Screen

Public Class frmSplashScreen 

Private Sub tmrSplashScreen_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrSplashScreen.Tick 
    Me.Hide() 
    frmLogin.Focus() 
    frmLogin.Show() 
End Sub 

End Class 

B. Formulaire de connexion (pour l'accès au système)

Public Class frmLogin 

Public userName As String 
Public passWord As String 

Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click 

    End 

End Sub 

Private Sub cmdSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSubmit.Click 

    userName = txtUsername.Text 
    passWord = txtPassword.Text 

    If userName = "Admin" And passWord = "12345" Then 
     MsgBox("Access Granted! Welcome to BYTE!", MsgBoxStyle.Information, "Byte EGC Payroll System") 
     Me.Close() 
     frmMainMenu.Show() 
     frmMainMenu.Focus() 
    Else 
     MsgBox("Access Denied!", MsgBoxStyle.Critical, "Byte EGC Payroll System") 
    End If 

End Sub 

End Class

et enfin:

C. Menu principal.

Public Class frmMainMenu 

Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click 

    End 

End Sub 

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

    Me.WindowState = FormWindowState.Maximized 

End Sub 

Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click 

    MsgBox("Byte" & vbCrLf & "By: JU-CHAN", vbInformation, "Byte Payroll System") 

End Sub 

End Class

aide est grandement appréciée. Je vous remercie! :)

+0

Le point de cet écran de démarrage au mess juste avec les gens en les faisant attendre sans raison? En outre, je suppose que c'est du code truqué et que vous n'avez pas vraiment un mot de passe codé de manière rigide comme ça dans un système de production. Droite? – JohnFx

+0

Hmm ... vous avez peut-être raison, mais avoir le if-else de l'écran de connexion est seulement dans le seul but de permettre à mon instructeur de vérifier tout mon système pour le classement. Je suis pleinement conscient de l'utilisation réelle de l'écran de connexion dans les programmes du monde réel. Mais encore, je vais considérer votre message ici, dans lequel vous avez dit que les écrans de démarrage sont mauvais. Je suis d'accord avec ça. :) –

Répondre

1

Votre écran de démarrage ne doit pas être contrôlé lorsque le formulaire de connexion s'affiche. Un écran de démarrage ne doit être utilisé que lors du démarrage du programme lorsqu'il effectue beaucoup de traitement en arrière-plan avant que le programme puisse réellement démarrer. Juste montrer un écran de démarrage pour le plaisir de le faire va ennuyer les utilisateurs finaux.

Depuis votre écran d'ouverture de session de base ci-dessus ressemble pas à cela prendrait beaucoup de ressources à utiliser, une meilleure option serait d'utiliser le flux de:

Afficher l'écran d'ouverture de session
Si le mot de passe est succès puis
- affichage à l'écran de démarrage
- application de la charge en arrière-plan
- une fois que l'application est chargée, afficher la fenêtre principale et cacher les éclaboussures scrfeen

Quelques exemples de code pour ce serait:

Module modMain 
    'In a module 
    Public frmSpl As frmSplash 
    Public frmMain As frmMainMenu 

    Public Sub Main(ByVal args() as String) 
     dim frmLogin as New frmLogin 

     'Assume frmLogin is a modal form 
     frmLogin.Show 

     'A public property set on the Login form 
     If frmLogin.Passed = True Then Do 
      'Load and display the splash screen 
      frmSpl = New frmSplash 
      frmSpl.Cursor = Cursors.WaitCursor 
      frmSpl.Show() 
      Application.DoEvents() 

      'If there is any code needed to run before displaying the Main Form 
      'do it here 

      frmMain = New frmMainMenu 

      'Begin running standard application loop for frmMainMenu 
      Application.Run(frmMain) 
     End If 
    End Sub 
End Module 

Puis, en frmMainMenu vous auriez un code similaire à:

Public Class frmMainMenu 

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

     Try 
      Me.Cursor = Cursors.WaitCursor 
      Me.SuspendLayout 

      Me.WindowState = FormWindowState.Maximized 

      'Put any other loading code needed for this form here 
     Catch (ex as Exception) 
      'Handle exceptions here 
     Finally 
      'Hide the splash screen 
      frmSpl.Hide() 
      frmSpl.Dispose() 

      'Display the form 
      Me.ResumeLayout 
      Me.Cursor = Cursors.Default 
      Me.Show 
     End Try 

    End Sub 
2

Je parie que votre problème est que la minuterie de votre écran de démarrage déclenche toujours des événements _tick et affiche de nouveau la page de connexion.

Peut-être ajouter tmrSplashScreen.Stop() avant de masquer l'écran de démarrage?

Ou mieux encore. Débarrassez-vous de l'écran de démarrage, ils sont mauvais.

2

La minuterie continue de tourner, ce qui provoque l'écran d'accueil pour recharger, puis cacher, montrant l'écran de connexion à nouveau.

Essayez de mettre cela dans le gestionnaire de la tique tmrSplashScreen:

tmrSplashScreen.Enabled = False 
Questions connexes