如何关闭表单并返回到mainform

时间:2016-06-15 13:52:41

标签: c#

我的问题似乎很容易,但实际上非常棘手。我在这里搜索很多,但我找不到任何结论。

我有一个需要经常打开的主变形。我有一个调用form2的按钮,我对它做了一些操作,然后调用一个form3,让用户选择一个项目然后关闭它并返回到mainform。棘手的部分是我需要将数据从f3传递到f1。

我的问题是,在第二种形式上我有下一个&取消按钮(和关闭按钮)。下一步按钮隐藏f2,form1“回来”&打电话给form3。为什么不直接调用form3?因为我需要将数据从form3传递给form1所以我需要从form1调用form3。 所以我想要取消按钮(和关闭按钮)返回到form1而不调用form3。我不确定是什么,所以这是我的代码

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非常简单

 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}

}

并且form3我从列表中选择要发送到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();
                }
            }
    }

好的,对你们中的一些人来说,我的问题似乎毫无用处,我的代码一无所获,但我确实需要这些形式。 (我需要从form1打开form3以将数据3发送到1)

忘掉* Form1 form1 = new Form1();它调用一个新的form1,我不想要它!

1 个答案:

答案 0 :(得分:1)

您实际上无需从form3致电form1只是为了传递一个值。如果我理解正确,那么所需的流程应该是这样的

form1
  opens
    form2
      opens
        form3
          |
          | value
          |
form1 <---+

所以form1打开form2会打开form3form3的值应该传回form1,对吗?

我要做的是在ValuePickedInForm3中声明属性form2或其他内容,并在form1关闭时在form2中获取此内容。

示例

此伪代码位于form2

public string ValueFromForm3
{
    get;
    private set;
}


public void ShowForm3()
{
    using (Form3 f3 = new Form3())
    {
       if (f3.ShowDialog(this) == DialogResult.OK)
           ValueFromForm3 = f3.TheValueYouNeed;
    }
}

这个伪代码进入form1类:

public void ShowForm2()
{
    using (Form2 f2 = new Form2())
    {
        if (f2.ShowDialog(this) == DialogResult.OK)
            DoSomethingWith(f2.ValueFromForm3);
    }
}