2014-11-20 76 views
0

我想知道如何將變量從Form2發送到Form1。我在Form1中有一個文本框和按鈕,在Form2中有一個文本框和按鈕。我的應用程序從Form1開始,textbox1爲空,單擊按鈕Form2將出現。在Form2中,我想編寫數字,然後單擊按鈕將其發送到Form1文本框。將變量從Form2發送到Form1

我正在嘗試此代碼,但我不知道如何解決它。

Form 1代碼:

public static int number; 
public Form1() 
{ 
    InitializeComponent(); 
} 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form = new Form2(); 
    form.Show(); 
} 

Form2的代碼

public Form2() 
{ 
    InitializeComponent(); 
} 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form1.number = textBox1.Text; 
    this.Visible = false; 
} 

現在我有變量,名爲Form1中數,其中包含窗體2文本框的值,對不對?但我怎麼說:textbox1.text(Form1)=該行動後的數字?我需要刷新Form1嗎?

謝謝!

回答

1

我會說一個很好的簡單的方法做這種事情,是通過使公共事件:

在形式上二,添加事件:

public partial Class Form2 
{ 
    public event Action<string> SomethingHappened; 
... 

我們需要火在Form2事件 - 通知用戶:

//On Form2 
private void button1_Click(object sender, EventArgs e) 
{ 
    if(SomethingHappened != null) 
     SomethingHappened (textBox1.Text); 
} 

然後,在創建「訂閱」父窗體Form1到子窗體上的動作:

Form2 form = new Form2(); 

//Here, we assign an event handler 
form.SomethingHappened += (string valueFromForm2) => 
{ 
    //Event handled on Form1 
    this.Number = valueFromForm2; 
}; 
0

設置聽起來有點像設置對話框,在Form1關閉之前無法在Form1中繼續。

如果是這種情況,那麼更多的東西像他將在Form1上是適當的:

public partial class Form1 : Form 
{ 

    private int number = 411; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.textBox1.Enabled = false; 
     this.textBox1.Text = number.ToString(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(this.number); 
     if (f2.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      this.number = f2.Number; 
      this.textBox1.Text = this.number.ToString(); 
     } 
    } 

} 

隨着窗體2看起來像:

public partial class Form2 : Form 
{ 

    public Form2(int number) 
    { 
     InitializeComponent(); 
     this.textBox1.Text = number.ToString(); 
    } 

    private int number = 0; 
    public int Number 
    { 
     get { return this.number; } 
    } 

    private void btnOK_Click(object sender, EventArgs e) 
    { 
     int value; 
     if (int.TryParse(this.textBox1.Text, out value)) 
     { 
      this.number = value; 
      this.DialogResult = System.Windows.Forms.DialogResult.OK; 
     } 
     else 
     { 
      MessageBox.Show(textBox1.Text, "Invalid Integer"); 
     } 
    } 

} 
+0

他的形式是不是一個模式對話框。 – Servy 2014-11-20 20:33:35

+0

@Servy沒錯,描述沒有明確說明它是......但作者可能沒有很好地描述它,或者沒有意識到他們正在尋找什麼。我可能是錯的;這不會是第一次。 ;) – 2014-11-20 20:44:06