2011-09-15 9 views
0

良い一日の男! VB.NETで質問があります。ログイン画面で給与計算システムのメインページを表示するためのGUIを作成してテストする際に、この問題があります。複数のフォームでVB.NET:問題

スプラッシュ画面が正常に読み込まれ、ログインフォームが表示されます。ユーザー名とパスワード(例:ユーザー名:管理者、パスワード:12345)を入力し、ログインに成功しました。問題は次のとおりです。メインメニューが表示されたら、ログイン画面がもう一度表示されます。この時点では、画面はすでに閉じているはずです。私はShow、Hide、Closeの使用に何か問題がありましたか?

ここに3つのフォームのコードがあります。

A.スプラッシュスクリーン

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.ログインフォーム

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 

エンドクラス

そして最後に:

C.メインメニュー。

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 

エンドクラス

ヘルプは大歓迎です。ありがとうございました! :)

+0

ですか?また、私はこれが偽装されたコードであると仮定しており、実際には実動システムでそのようにハードコードされたパスワードは持っていません。右? – JohnFx

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええるのは、現実のプログラムでのログイン画面の実際の使用を十分に認識しています。しかし、まだ、私はあなたの記事をここで考えていきます。そこでは、スプラッシュ画面が悪いと言っています。私はそれに同意する。 :) –

答えて

1

ログオンフォームが表示されているときにスプラッシュ画面を制御してはいけません。スプラッシュ画面は、プログラムが実際に起動する前にバックグラウンドで多くの処理を行っているときにのみ、プログラムの起動時に使用する必要があります。それを行うためのスプラッシュ画面を表示するだけで、エンドユーザーは迷惑になります。

上記の基本的なログオン画面は、それが使用するリソースの多くを取るよう、より良いオプションはの流れを使用することです見ていないので:

ショーのログオン画面
パスワードがある場合成功し、その後
- 表示スプラッシュ画面
- バックグラウンドでロード・アプリケーション
- アプリケーションがロードされると、メインウィンドウと非表示スプラッシュを表示scrfeen

このためのいくつかのサンプルコードは次のようになります。タイマーが示す、隠し、その後、リロードするスプラッシュ画面を引き起こして、刻々と過ぎて続ける

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

あなたの問題を賭けているのは、あなたのスプラッシュ画面のタイマーが_tickイベントを発生させていて、再度ログインページを表示していることです。

スプラッシュ画面を非表示にする前にtmrSplashScreen.Stop()を追加することはありますか?

またはそれ以上。スプラッシュ画面を完全に取り除くと、彼らは悪です。

2

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 

はその後frmMainMenuであなたは次のようにコードを持っているでしょうログイン画面を再度開きます。

はtmrSplashScreenティックハンドラでこれを入れてみてください:彼らは理由もなく待つことによって人々とだけ混乱へのスプラッシュ画面のポイントは

tmrSplashScreen.Enabled = False