2016-09-05 2 views
0

上のForm2を表示しますそう、隠すForm1が、私のアプリのForm1が私がしたいのログインページでForm1_Load

private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2= new Form2(); 
     f2.Show(); 
     this.Hide(); 
    } 

のようなボタンのクリックイベントによってフォームが、同じ技術がForm1_Loadのために動作しません。

私は this threadで最初の例を試してみました

Program.csの

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

をForm1

private void Form1_Load(object sender, EventArgs e) 
    { 

     Form2 f2= new Form2(); 
     f2.Show(); 
     this.Hide(); 
    } 

しかし、それは、Form1のかForm2のどちらを示していません私はそれがどのようにc表示されませんould。 2番目の例では、実装方法を理解できず、次のGoogleの結果はさらに混乱します。
私はこれを2時間頑張ってください。

+0

「Application.Run(new Form1()); in program.cs – Stefan

+0

これはデフォルトの方法です。しかし、Form1_Loadで 'this.Hide()'を実行してもForm1は隠されません。 –

+0

あなたのプログラムは 'Form1'を作成してロードする必要があります。デフォルトかどうか。あなたはどこかに '新しいForm1'と' Show'が必要です。 'Application.Run'は通常これを正しい方法で処理します。別の方法として、メイン関数に 'Form1'を作成する方法があります。 '.Show'は非ブロッキング呼び出しであり、あなたがそれを処理しなければアプリケーションは終了することに注意してください。 – Stefan

答えて

3

program.csの最後の行には、かっこの間にnew Form1()と入力する必要があります。だから、あなたのProgram.csのコードは以下の通りです:

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

C#はどうやらのForm_Load evantでフォームを隠すことはできません。 問題を解決するには、タイマーを使用して、チックイベントでフォームを非表示にすることができます。すなわち:

Timer timer = new Timer(); 

private void timerTick(object sender, EventArgs e) 
{ 
    timer.Enabled = false; 
    this.Hide(); 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    timer.Tick += new EventHandler(timerTick); 
    timer.Interval = 10; 
    Form2 frm = new Form2(); 
    frm.Show(); 
    timer.Enabled = true; 
} 

これは機能します。私はそれをテストしました。

これは役に立つと思います。

+0

あなたが言っていることは分かっていますが、これは私の問題を解決するものではありません。 –

+0

@Cris:すぐに問題を解決できない可能性があるため、この問題にも対処する必要があります。 – Stefan

+0

私の解決策を編集しました。私はそれがOKと思う。 –

0

フォームの順序を逆にしないのはなぜですか? mainメソッドのメインフォームから始めます。

Application.Run(new Form2()); 

今のForm2のコンストラクタでShowDialogメソッドでログインフォームを呼び出し、状態を確認Form2.Loadイベントで今すぐForm2の

public class Form2:Form 
{ 
    private bool _isValidated = false; 
    public Form2() 
    { 
     InitializeComponent(); 

     // Add here the conditions to check if you don't want to 
     // run the login process... 
     // if(loginNotRequired) 
     // _isValidated = true; 
     // else 

     using(Form1 fLogin = new Form1()) 
     { 
      // This blocks until the user clicks cancel or ok buttons 
      DialogResult dr = fLogin.ShowDialog(); 
      if(dr == DialogResult.OK) 
       _isValidated = true; 
     } 
    } 

内のグローバル変数にログインした結果を設定しますログインのログインが成功しなかった場合のForm2を閉じ

private void Form2_Load(object sender, EventArgs args) 
    { 
     if(!_isValidated) 
      this.Close(); 
     else 
      ..... 
    } 
0

こんにちはあなたはこの

を使用することができます
private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f2= new Form2(); 
    if(condition==true) 
    { 
     this.Hide(); 
     f2.ShowDialog(); 
     this.Close(); 
    } 
} 
関連する問題