【问题标题】:why form2 passes blank variable to form1?为什么form2将空白变量传递给form1?
【发布时间】:2015-11-06 21:38:51
【问题描述】:

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

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

我不知道出了什么问题。谁能帮我做什么? 谢谢

表格1:

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:

public partial class Form2 : Form
{

    string a;

    public string p
    {

        get { return a; }
    }
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        a = textBox1.Text;
        this.Close();
    }
}

【问题讨论】:

  • 因为一旦你显示它,它就会离开按钮点击处理程序并且frm2.p 尚未设置。一旦你在form2中设置了button1_Click,你需要告诉form 1再次更新。
  • 你真的应该努力改进你的变量名。拥有apfrm2 等变量比有意义的变量名称更难理解。

标签: c#


【解决方案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 中的按钮时,它会显示表单 2,然后立即读取 frm2.p 变量,而无需等待用户在表单 2 中更新它。如果你想保持原样,你需要告诉 form1 再次更新自己。

【讨论】:

  • 嗨罗恩拜尔。我改用 ShowDialog 并且它起作用了。你解释得很好:)。非常感谢楼主
【解决方案2】:

如果用户在第二个表单打开时能够使用Form1 并不重要(在这些情况下,通常他们使用它实际上很重要)然后只需使用ShowDialog 而不是Show 来显示第二种形式,然后您的代码就可以工作了。

如果第二个表单不是模态的很重要,那么您需要使用一个事件来更新第一个表单,因为它当前所在的位置是在显示表单后使用第二个表单的值更新文本框,并且用户当时还没有输入该值。以下是使用事件更新第一个表单的方法:

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

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

【讨论】:

  • 嗨服务。我改用 ShowDialog 并且它起作用了。现在我将不得不看看 ShowDialog 和 show 之间的区别。谢谢楼主
猜你喜欢
  • 1970-01-01
  • 2014-01-02
  • 2011-05-11
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2015-05-20
相关资源
最近更新 更多