Reputation: 261
My question seems very easy but it's actually quite tricky. I search a lot on here and I dont find anything conclusive.
I have a mainform which need to be constantly open. I have a button which call a form2, I do some action on it, then call a form3 which let the user choose some item then close it and come back to mainform. The tricky part is i need to pass data from f3 to f1.
My problem is, on the second form I have a next & cancel buttons (and a close button) . Next button hide f2, form1 "come back" & call the form3. Why not call directly the form3? because I need to pass data from form3 to form1 so i Need to call form3 from form1. So i want Cancelbutton (and closing button) to come back to form1 without calling form3. I am not sure to be understood so here's my code
public partial class Form1 : Form
{
private void bouya_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
Form3 form3 = new Form3(); //it opens when form2 closes!!!
form3.ShowDialog();
string data1 = form3.label2.Text; //the data i need, without calling form3 from here i can't pass data !!!
//do some action with data1
}
}
form2 is very simple
public partial class Form2 : Form
{
private void Next_Click(object sender, EventArgs e)
{ this.Hide(); }
private void Cancel_Click(object sender, EventArgs e)
{//i just want here to cancel winform3 to be called}
private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{ // Actually this command does'nt work at all i tried
//to put a messagebox.Show("bla") nothing happens but i would like to do the same}
}
And form3 I select an item from a list to be send to form1
public partial class Form3 : Form
{
private void button1_Click(object sender, EventArgs e)
{
foreach (Object obj in listBox1.SelectedItems)
{
label2.Text = obj.ToString();
this.Hide();
}
}
}
Ok for some of you my problem would seem useless and i complicated my code for nothing but i really need these form. (and i need to open form3 from form1 to send data 3 to 1)
Forget about *Form1 form1 = new Form1(); it calls a new form1 and i don't want it !
Upvotes: 0
Views: 251
Reputation: 56727
You actually do not need to call form3
from form1
just to pass a value. If I understand you correctly, the desired flow should be like this
form1
opens
form2
opens
form3
|
| value
|
form1 <---+
So form1
opens form2
which opens form3
and the value from form3
should be passed back to form1
, right?
What I'd do is declare a property ValuePickedInForm3
or whatever in form2
and get this in form1
when form2
closes.
Example
This pseudo-code is in the form2
class
public string ValueFromForm3
{
get;
private set;
}
public void ShowForm3()
{
using (Form3 f3 = new Form3())
{
if (f3.ShowDialog(this) == DialogResult.OK)
ValueFromForm3 = f3.TheValueYouNeed;
}
}
This pseudo-code goes into the form1
class:
public void ShowForm2()
{
using (Form2 f2 = new Form2())
{
if (f2.ShowDialog(this) == DialogResult.OK)
DoSomethingWith(f2.ValueFromForm3);
}
}
Upvotes: 1