2017-06-15 46 views
0

在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上它仍然是空的。

+0

要更新'Form1',不是原来的实例是前手跑的新实例。 –

回答

1

的问题是,你从Form2创造Form1一个新的实例并设置它的属性,但只要你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... 
} 
+0

正是我需要的,非常感谢! – Nate

相关问题