2016-06-15 7 views
1

ユーザー名とパスワードを挿入すると、関連フォームはロードされません。ログイン画面のみが非表示/非表示になります。ユーザーロール/パスワード/ everythinは100%正しいです。 「役割」の出力も正しい。 お知らせください。C#フォームはswitch文でロードされません

private void btnLogin_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     DataTable result = uc.Login(tbxUserName.Text, tbxPassword.Text); 
     if (result.Rows.Count == 1) 
     { 
      this.Hide(); 
      string role = result.Rows[0]["Role"].ToString(); 

      switch (role) 
      { 
       case "User": 
        FrmUser fuser = new FrmUser(); 
        fuser.ShowDialog(); 
        this.Close(); 
        break; 

       case "Admin": 
        FrmMain fmain = new FrmMain(); 
        fmain.ShowDialog(); 
        this.Close(); 
        break; 
      } 
     } 
     else 
     { 
      MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
+0

スイッチケースの近くにブレークポイントを置き、テストしましたか? –

+0

あなたは 'fuser.ShowDialog()'の代わりに 'fuser.Show()'を試しましたか? ShowDialogは結果を返すまで親フォームへのアクセスを制限するモーダルフォームを返します。http://msdn.microsoft.com/en-us/library/c7ykbedk(v=vs.110).aspx –

+0

私は試しました。同じ結果。パスワードを挿入すると、すべてが消えますが、ビジュアルスタジオはアプリケーションがまだ実行中であることを示しています。 – ceranda

答えて

0

私はむしろ、ログインが成功した後の背後に隠されているログインフォーム保つ、すべての役割にログインフォームを閉じるためにthis.Close()を実行するよりも、気づい:代わりに、ユーザーの両方に&メインフォームを

if (result.Rows.Count == 1) 
    { 
     this.Hide(); 
     string role = result.Rows[0]["Role"].ToString(); 

     switch (role) 
     { 
      case "User": 
       FrmUser fuser = new FrmUser(); 
       fuser.ShowDialog(); 
       // note that this.Close() removed 
       break; 

      case "Admin": 
       FrmMain fmain = new FrmMain(); 
       fmain.ShowDialog(); 
       // note that this.Close() removed 
       break; 
     } 
    } 
    else 
    { 
     MessageBox.Show ("Invalid User Name or Password", "Incorrect Login Details",MessageBoxButtons.OK,MessageBoxIcon.Error); 
     Application.Exit(); // optional, use if you want to exit all app window when wrong credentials supplied 
    } 

と場所閉鎖ハンドラをしたがって、そのうちの1つを閉じると、隠しログインフォームも閉じます。

private void FrmUser_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); 
} 

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Close(); 
} 

参照:When this.Close() executed all forms close?

問題が解決したら、CMIIW。

+0

努力仲間に感謝します。結果は同じです。あなたの時間を感謝します。 – ceranda

+0

この時点から、Mainメソッド内のApplication.Runでメインフォームとして設定したフォームはまだ判別できません。そのログインフォームがメインフォームになったら、それを閉じるとアプリケーション全体を終了させることを意味します。その条件があなたに合っている場合、最初の場所でメインフォームとして設定するためにログインフォームではなく別のフォームを選択します。 –

0

実際これは変です。フォームが開いていて何らかの形でフォーカスが失われているかどうかを確認できますか?この文の後に次のコードを置くことを行うことができます。

fuser.ShowDialog(); 

コードをフォームがまだ開いているかどうかを確認するために:これは役立つかもしれ

if (Application.OpenForms[fuser.Name] == null) 
{ 
    MessageBox.Show("Form is not open"); 
} 

希望。

関連する問題