2009-03-30 16 views
1

C#windowsフォームアプリケーションを閉じる際に問題が発生しています。それは現在、私にタイトルや何もない空白のフォームを与えるだけです。 私はこの小さな不明なウィンドウを閉じる方法を見つける必要があります。C#Windowsフォームを閉じる問題

私はログイン画面用と実際のアプリケーション用の2つのフォームページを用意しています。すべてがprogram.csファイルによって実行されます。

Program.csの

... 
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new PROG1()); 
} 

これが私のプログラムを実行するためのVisual Studioで作成されただけで、基本的なメインです。

はその後、我々は、メインプログラムに

PROG1.cs

... 
public PROG1() 
{ 
    Login LoginForm = new Login(); 
    DialogResult a = LoginForm.ShowDialog(); 

    if(LoginForm.ValidLogin == 1) { 
     InitializeComponent(); 
    } else { 
     Application.Exit(); //FAIL 
    } 
} 

を持っているあなたは、最初のProgram.csファイルがlogin.csのインスタンスを呼び出すPROG1.csを呼び出すことがわかります。有効なログインを挿入すると、ログインページが閉じられ、メインのPROG1が表示されます。ただし、ログインフォームを閉じるために赤いXをクリックするだけでProg1とLoginForm.ValidLogin!= 1になりますので、フォームを初期化せずにフォームを閉じるようにします。これは、私を終了させるのではなく、初期化していないフォームを残すだけです。代わりにthis.close()を実行すると、ランタイムエラーが発生します。

すべてのアイデア?

答えて

4

これまでのところ、InitializeComponent呼び出しを戻します。初期化されていない変数を使用しようとする試みは、自分自身を閉じるように指示することを含めて、悪い考えです。

初期状態が表示されずに非表示になるように、PROG1フォームのプロパティを構成します。 LoginFormが返った後、PROG1コードは、自分自身を表示するかどうかを決めることができます。

1

あなたはコンストラクタでこれを行うべきではありません。

ほとんどまたはまったく表示されない新しい入力フォームがあり、LoadイベントまたはメインフォームのLoadイベントにログインフォームが表示されます。モーダルダイアログを表示すると、親フォームにアクセスすることはできず、ログインに失敗した場合は親を閉じることができます。

2

InitializeComponent()メソッドの内容が実行に非常に時間がかかるため、フォームが失敗しても初期化されないのはなぜですか?

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    LoginForm login = new LoginForm(); 

    if (login.ShowDialog() == DialogResult.OK && 
     login.ValidLogin == 1) 
    Application.Run(new PROG1()); 
} 

そして、PROG1のコンストラクタからロジックを削除してください。

1

私はサミュエルが提案するベストプラクティスをお勧めします。あなたが迅速な何かをしたい場合は、メインのVisual Studioの者へのログインロジックを移動してみ生成:

[STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     Form2 login = new Form2(); 
     if (login.ShowDialog() == DialogResult.Yes) 
     { 
      Application.Run(new Form1()); 
     } 
    } 

private void button1_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = DialogResult.No; 
     this.Close(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = DialogResult.Yes; 
     this.Close(); 
    } 
にForm2.cs

でProgram.csのでは
関連する問題