Solved

Easy WinForm Question

Posted on 2009-05-12
22
262 Views
Last Modified: 2012-05-06
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?
0
Comment
Question by:copyPasteGhost
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 14
  • 6
  • 2
22 Comments
 
LVL 6

Expert Comment

by:Cebik
ID: 24365512

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

Open in new window

0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365519
ShowDialog - open form and wait to end..
0
 
LVL 7

Expert Comment

by:zwei
ID: 24365574

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
Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now

 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365605
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
 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365614
@zwei

where do I put that?
0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365692
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
 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365713
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365718
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365742
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
 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365754
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365755
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365780
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
 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365790
right...that I knew...I mean here...In Form2...

private void btnBack_Click(object sender, EventArgs e) {
         this.Hide();
         this.Show();
      }
0
 
LVL 6

Accepted Solution

by:
Cebik earned 500 total points
ID: 24365823
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365833
it's all in FORM1

in FORM2 do only

private void btnBack_Click(object sender, EventArgs e) {
         this.Hide();
      }
0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365848
i must go :/
i hope you got it
0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365883
sorry..  in your example make this
Form2 form2 = new Form2();

0
 
LVL 13

Author Comment

by:copyPasteGhost
ID: 24365888
perfect thanks.
0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365889

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

Expert Comment

by:zwei
ID: 24365895
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
 
LVL 6

Expert Comment

by:Cebik
ID: 24365900
ufff..
:)
youre welcome
0
 
LVL 6

Expert Comment

by:Cebik
ID: 24365928
it will work too..
0

Featured Post

MS Dynamics Made Instantly Simpler

Make Your Microsoft Dynamics Investment Count  & Drastically Decrease Training Time by Providing Intuitive Step-By-Step WalkThru Tutorials.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question