在第二个表单上选择后修改文本框值?

时间:2017-06-15 20:56:51

标签: c# .net winforms

在FORM1中,我有一个包含占位符文本的文本框。单击时,将弹出第二个表单(FORM2),其中包含可供选择的项目列表。他们选择他们的选择并按下SELECT和FORM2关闭,FORM1的文本框将填充他们从FORM2的选择。

这就是我所拥有的:

FORM1 -

    // Variables
    public string ID{ get; set; }

    private void openF2_Click(object sender, EventArgs e)
    {
        FORM2 f2 = new FORM2();
        f2.Show();
        // updateText(); <-- when called through here, ID is still empty.
    }

    public void updateText()
    {
        textBox1.Text = ID;
        // textBox1.Refresh(); <-- I thought this would work
    }

    // Check if it did change
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        textBox1.BackColor = Color.White;
    }

FORM2 -

    private void btnSelect_Click(object sender, EventArgs e)
    {
        FORM1 f1= new FORM1();
        f1.ID = listOfChoices.SelectedItems[0].SubItems[0].ToString();
        f1.updateText();
        this.Close();
    }

当我浏览代码时,我看到ID正确设置,当FORM2调用“updateText()”时,它将textbox1值设置为ID,textChanged函数也运行,但在GUI上,它仍然是空的

1 个答案:

答案 0 :(得分:1)

问题是,您要从Form1创建Form2的新实例,并在其上设置属性,但只要您的Form2消失,那么它创建的实例。

在您的情况下,解决此问题的最简单方法是将您的Form2显示为对话框 - 这意味着Form1暂停时所有执行都会暂停。然后,当Form2关闭时,您仍然可以从Form1访问它的属性,因为Form1上的执行会从它停止的位置再次获取。这意味着如果我们在Form2上创建公共属性并将其设置为用户选择的值,我们可以稍后访问它。

以下是一种方法:

<强>窗体2

让我们创建一个名为ChosenItem的公共属性,然后我们将其设置为用户选择的项目:

public partial class Form2 : Form
{
    public string ChosenItem = "Some default text";

    private void btnSelect_Click(object sender, EventArgs e)
    {
        ChosenItem = listOfChoices.SelectedItems[0].SubItems[0].ToString();
        this.Close();
    }

    // Rest of form code omitted...
}

<强> Form1中

启动Form2作为对话框,然后在关闭后从表单中设置我们的值:

public partial class Form1 : Form
{
    private void openF2_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.ShowDialog();
        textBox1.Text = f2.ChosenItem;
    }

    // Rest of form code omitted...
}