2017-06-15 53 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

相關問題