为什么form2将空变量传递给form1?

时间:2015-11-06 21:38:52

标签: c#

我希望form2在关闭时将文本框中的文本传递给form1。

我有2张表格,如照片所示。 当form2打开时,当我输入文本然后单击“发送文本到form1”没有任何反应时,文本不会传递给form1(form2关闭但form1中的文本框仍然为空)。

我不知道出了什么问题。任何人都可以帮我做什么? 谢谢

photo

Form1中:

for student in classroom.students as! NSSet([Student]) {
    print(student.name)
}

窗体2:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();

        textBox1.Text = frm2.p;

    }
}

2 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将form2显示为对话框:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.ShowDialog();  //<-- This line changed.
        //With using ShowDialog(), the code pauses here until frm2 is closed
        //and then resumes on the next line.

        textBox1.Text = frm2.p;

    }
}

问题是,当您单击表单1中的按钮时,它会显示form2,然后立即读取frm2.p变量,而无需等待用户在form2中更新它。如果你想保留它,你需要告诉form1再次更新自己。

答案 1 :(得分:1)

如果在第二个表单打开时用户能够使用Form1并不重要(在这些情况下,它们通常很重要,因为它们实际上很重要< em> not 使用它)然后只需使用ShowDialog而不是Show来显示第二个表单,然后您的代码就可以运行。

如果第二种形式不是模态的,那么重要的是,你需要使用一个事件来更新第一个表单,因为当前它正在用你更新文本框。显示表单后第二个表单的值,用户当时没有输入值。以下是您如何使用事件更新第一个表单:

private void button1_Click(object sender, EventArgs e)
{
    Form2 frm2 = new Form2();
    frm2.Show();

    fm2.FormClosed += (s, args) => textBox1.Text = frm2.p;
}