プロが教える店舗&オフィスのセキュリティ対策術

C# ログイン画面からメイン画面への画面遷移について

C#での画面遷移に関する質問です。
ログイン画面からメイン画面に遷移する場合、どの様な方法で遷移すれば良いのか
迷っています。

現状では以下の方法で遷移していますが、より適切な方法をご存じの場合
ご教示下さい。

(1)Program.csにおいてApplication.Run(new LoginDialog())で
ログイン画面を表示

(2)ログインボタンクリックメソッドでログイン成功時、
メイン画面インスタンスを生成・表示し、ログイン画面を非表示。
(後でログイン画面を再表示することがある為)

---------------------------------------------------------------------
private void LoginButton_Click(object sender, EventArgs e)
{
   /* ログイン処理 */

   //ログイン成功時
   //メイン画面インスタンス生成
   MainForm mainForm = new MainForm();
   //ログイン画面インスタンスを代入
   mainForm.loginForm = this;
   //メイン画面表示
   mainForm.Show();
   //ログイン画面非表示
   this.Visible = false;
}
---------------------------------------------------------------------

また上記の方法だとメイン画面を閉じても、アプリケーションは終了しない為
メイン画面の閉じるボタンを押した場合に以下の処理を行っています。

---------------------------------------------------------------------
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
   //ログイン画面クローズ
   loginForm.Close();
}
---------------------------------------------------------------------

以上、宜しくお願いします。

A 回答 (4件)

#2です。


最初にログイン画面のみを表示したいなら
メイン画面のForm_menu_Load(loadイベント処理)
の中で、ログイン画面をモーダル表示し、
NGならメイン画面のcloseのほうがよいかも知れません。
    • good
    • 1
この回答へのお礼

なるほど!メイン画面のloadイベント処理でログイン画面を表示する
考えは無かったですね。

親切に教えて頂き有難うございました。

これからも質問させて頂くこともあると思いますが、
その際はまた宜しくお願いします。

お礼日時:2010/09/26 21:31

programクラスに LoginFormのインスタンスを生成しておいて


LoginFormの中のログイン実行ボタンのDialogResultプロパティをDialogResult.OKなどに設定
ログイン実行ボタンのクリックイベントで認証を失敗したっ場合に
this.DialogResult = DialogResult.Cancel;
を実行

としてやればいいように思いますが …

static class Program
{
  public static LoginForm objLogin;
  static void Main()
  {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    objLogin = new LoginForm();
    if ( DialogResult.OK == objLogin.ShowDialog() )
    {
      Application.Run(new MainForm());
    }
}

class LoginForm
{
  private bool flgLogin = false;
  void button1_Click(object sender, EventArgs e)
  {
    // ココに認証を実行するコードを記述
    // flagLoginに結果を取得
    if ( flgLogin == False )
    {
      this.DialogResult = DialogResult.Cancel;
    }
  }
}

MainFormからLogInFormを表示する場合
Program.objForm.ShowDialog();
を実行してやればいいでしょう
結果の取得などは適宜修正をしてください

といった具合で …
    • good
    • 1
この回答へのお礼

丁寧に実装方法を教えて頂き、有難うございます。

今回は最初に回答して頂いたtatsu99さんの回答をベストアンサーとさせて頂きましたが、非常に勉強になりました。

お礼日時:2010/09/26 21:35

#1です。


>したがって最初にDB接続をする為のログイン画面を表示するのですが、DB接続先を
>変更したい場合にメイン画面のメニューからログイン画面を再表示する仕様を
>考えています。

なるほど、そういうことですか。
そのような場合、私なら以下のようにします。
1.メイン画面の表示開始時、
Form_menu_Shown(shownのイベントハンドラ)で、ログイン画面をモーダル表示する。
認証NGなら、メイン画面を閉じて終了
2.以降、メイン画面のみ表示し、メイン画面を閉じて終了。
ただし、接続先の切り替えの発生時は、ログイン画面をモーダル表示する。
認証OKなら、接続先を切り替える。NGなら今のまま続行。
    • good
    • 1

>メイン画面インスタンスを生成・表示し、ログイン画面を非表示。


>(後でログイン画面を再表示することがある為)

後でログイン画面を再表示することがある為なら、今の方法でよいかと
思いますが、
後でログイン画面を再表示しなければいけない理由は何でしょうか?
通常の運用では、ログイン画面で認証がおわれば、その画面は必要ないはずです。
ですので、その理由に非常に興味があります。差し支えなければ、その理由を教えていただけませんでしょうか?

ちなみに、ログイン画面を再表示しないでよいなら、
mainForm.ShowDialog()でメイン画面をモーダル表示すればよいと思います。

この回答への補足

回答有難うございます!

ログイン画面と記載しましたが、正確にはDBログイン画面となります。
私が作成しようとしているのはDBのデータ作成を簡単に行うことが出来るアプリ
です。
したがって最初にDB接続をする為のログイン画面を表示するのですが、DB接続先を
変更したい場合にメイン画面のメニューからログイン画面を再表示する仕様を
考えています。

補足日時:2010/09/24 23:45
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A