tags:

views:

247

answers:

4

When my program runs it closes form1 after a few seconds. Depending on what happened during form1's lifespan I may want to open form2. Normally I would just make a new instance of form2 and use the show() method. But form2 is then a child of form1 and then also closes. Does any body have an idea on how to get this to work? thanks.

+2  A: 

You can open a new form in your application's bootstrapper (main method). You will want to call Application.Run(yourFormHere). You would have two of these in a row in the order you want to show the forms. You could store the results of the first form in some static location and check that before showing the second form.

Jerry Bullard
How would I check the stored results?
Lienau
Nevermind, I figured it out.
Lienau
A: 

I don't think that your problem is that the Form2 instance is a child form of the Form1 instance, but rather that the Form1 instance is your applications main form. That will make your application quit whenever Form1 closed. One way to prevent this is to alter the main method to not set Form1 as the main form (see here for details on that).

Fredrik Mörk
+1  A: 

I ended up doing this:

 Auth f = new Form1();
 Application.Run(f);
 if (f.authed)
 {
    Application.Run(new Form2());
 }
Lienau
yep, that'll do it as well.The solution I offered below will allow you to control things in a more complicated scenario... but what you have will work fine
Fuzz
+3  A: 

For multi-form applications I tend to have one form that is the "main" form, which opens up the sub forms.

The main form is the one that gets started with Application.Run(...)

In your case you might want to have a blank form that can be the controller, and have Application.Run call that.

That form can then start instantiate your Form1 and run it. e.g.


public ControlForm : public Form
{
  Form1 form1;
  Form2 form2;

  public ControlForm()
  { 
    form1 = new Form1();
    form2 = new Form2();
  } 

  public void Start() // or something similar
  {
    form1.ShowDialog(); // will block showing the form, or you can do other tricks
                        // to show the form here
    if(form1.someFlag) form2.ShowDialog();
  }
} 

This is just "psudo-C#" code, but hopefully the concept makes sense Then your main function can just run "ControlForm"

Its just a concept you might want to try

Fuzz