Link to home
Start Free TrialLog in
Avatar of copyPasteGhost
copyPasteGhostFlag for Canada

asked on

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?
Avatar of Cebik
Cebik
Flag of Poland image


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

Open in new window

ShowDialog - open form and wait to end..

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

Avatar of copyPasteGhost

ASKER

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.
@zwei

where do I put that?
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

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?
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();
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

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?
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

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

right...that I knew...I mean here...In Form2...

private void btnBack_Click(object sender, EventArgs e) {
         this.Hide();
         this.Show();
      }
ASKER CERTIFIED SOLUTION
Avatar of Cebik
Cebik
Flag of Poland image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
it's all in FORM1

in FORM2 do only

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

perfect thanks.

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

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

ufff..
:)
youre welcome
it will work too..