Easy WinForm Question

Hello all,

I'm a asp.net guy not really a winform guy. I want to know something so simple it's stupid :)

I have two forms. form1 and form2

on form1 I have a button go to form2

when I click the button I do this:

this.Hide();
Form2 frm2 = new Form2();
frm2.Show();

and then we are now in form2.

on form2 I have a back button...

how can I get back to the first form...

obviously if I do this:

this.Hide();
Form1 frm1 = new Form1();
frm1.Show();

I will now have 2 form1 objects. (which I don't want.) and it will flush all the information that I put on Form1.

Any ideas how to do this?
LVL 13
copyPasteGhostAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
CebikConnect With a Mentor Commented:
no..

make this

Form form2 = new Form();
 
public Form1()
{
    InitializeComponent();
 
    form2.VisibleChanged += new EventHandler(form2_VisibleChanged);
}
 
void form2_VisibleChanged(object sender, EventArgs e)
{
    //set visible of form1 to form2.Visible negation!
    this.Visible = !form2.Visible;
}
 
private void buttonShowForm2_Click(object sender, EventArgs e)
{
    form2.Show();
}

Open in new window

0
 
CebikCommented:

this.Hide();
Form2 nf = new Form2();
nf.ShowDialog();
 
this.Show();

Open in new window

0
 
CebikCommented:
ShowDialog - open form and wait to end..
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
zweiSoftware DeveloperCommented:

form1Button.Click += new System.Eventhandler(form1Button_Click);
form2Button.Click += new System.Eventhandler(form2Button_Click);
 
form1Button_Click(object sender, Eventargs e)
{
    form1.Hide();
    form2.Show();
}
 
 
form2Button_Click(object sender, Eventargs e)
{
    form1.Show();
    form2.Hide();
}

Open in new window

0
 
copyPasteGhostAuthor Commented:
But for form 2 I want them to be able to go back to form1 and then if they want be able to go back to form2 again and still have everything there....like a previous/next kind of set up without loosing any information and without creating multiple objects.
0
 
copyPasteGhostAuthor Commented:
@zwei

where do I put that?
0
 
CebikCommented:
Try this then.
:)

public partial class Form1 : Form
{
    Form form2 = new Form();
 
    public Form1()
    {
        InitializeComponent();
 
        form2.FormClosing += new FormClosingEventHandler(nf_FormClosing);
    }
 
    private void button1_Click(object sender, EventArgs e)
    {
        this.Hide();
 
        form2.Show();
    }
 
    void nf_FormClosing(object sender, FormClosingEventArgs e)
    {
        e.Cancel = true;
        ((Form)sender).Hide();
        this.Show();
    }
}

Open in new window

0
 
copyPasteGhostAuthor Commented:
it's not really when form2 closes...it's when they click a back button..

how would I wire the event to the back button?
0
 
CebikCommented:
When somebady try to close form2 then we not allowed to do that and we hide form2 and show main form.

Form form2 = new Form();  //use your Form2 form2 = new Form2();
0
 
CebikCommented:
form2ButtonBack
.
Click
 
+=
 
new
 
System
.
Eventhandler
(
form2ButtonBack

_Click
);form2Button.Click += new System.Eventhandler(form2Button_Click);

or click 2 times on button in designer
and add code

Open in new window

0
 
copyPasteGhostAuthor Commented:
ok I see...

now what do we do with Form2? since when they click the back button I want them to go back to form1?
0
 
CebikCommented:
wow..
what was that !!??


click 2 times on button in designer
and add code

or

form2ButtonBack.Click += new System.Eventhandler(form2ButtonBack_Click);form2Button.Click += new System.Eventhandler(form2Button_Click);

Open in new window

0
 
CebikCommented:
this
.
Show
();   //if we are in class FORM1
or
form1.Show();  //show form1... 

you cant do new form.. 
new Form1(..)
you must have acces to

form1.Show();

Open in new window

0
 
copyPasteGhostAuthor Commented:
right...that I knew...I mean here...In Form2...

private void btnBack_Click(object sender, EventArgs e) {
         this.Hide();
         this.Show();
      }
0
 
CebikCommented:
it's all in FORM1

in FORM2 do only

private void btnBack_Click(object sender, EventArgs e) {
         this.Hide();
      }
0
 
CebikCommented:
i must go :/
i hope you got it
0
 
CebikCommented:
sorry..  in your example make this
Form2 form2 = new Form2();

0
 
copyPasteGhostAuthor Commented:
perfect thanks.
0
 
CebikCommented:

public partial class Form1 : Form
{
    Form2 form2 = new Form2();
 
    public Form1()
    {
        InitializeComponent();
 
        form2.VisibleChanged += new EventHandler(form2_VisibleChanged);
    }
 
    void form2_VisibleChanged(object sender, EventArgs e)
    {
        //set visible of form1 to form2.Visible negation!
        this.Visible = !form2.Visible;
    }
 
    private void buttonShowForm2_Click(object sender, EventArgs e)
    {
        form2.Show();
    }
}

Open in new window

0
 
zweiSoftware DeveloperCommented:
In my example I meant something like this:
//Form2 class:
public partial class Form2 : Form
    {
        private Form1 form1;
        
        public Form2(Form1 form)
        {
            InitializeComponent();
            form1 = form;
        }
 
        private void backBtn_Click(object sender, EventArgs e)
        {
            form1.Show();
            this.Hide();
        }
    }
 
//Form1 class:
 public partial class Form1 : Form
    {
        private Form2 form2;
        
        public Form1()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            form2 = new Form2(this);
        }
 
        private void backBtn_Click(object sender, EventArgs e)
        {
            form2.Show();
            this.Hide();
        }
    }

Open in new window

0
 
CebikCommented:
ufff..
:)
youre welcome
0
 
CebikCommented:
it will work too..
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.