場景:窗體 A 有 textBox1,窗體 B 需讀取其值。三種常用模式:
// FormB.cs
public partial class FormB : Form {
private string _dataFromA;
public FormB(string data) {
InitializeComponent();
_dataFromA = data;
}
private void FormB_Load(object sender, EventArgs e) {
label1.Text = _dataFromA;
}
}
// FormA.cs 按鈕點擊
private void btnOpenB_Click(object sender, EventArgs e) {
var formB = new FormB(textBox1.Text);
formB.Show();
}
// FormB.cs
public string DataFromA { get; set; }
// FormA.cs
var formB = new FormB();
formB.DataFromA = textBox1.Text;
formB.Show();
// FormB.cs
public FormA ParentForm { get; set; }
// FormA.cs
var formB = new FormB { ParentForm = this };
formB.Show();
// FormB 讀取
string val = ParentForm.textBox1.Text; // 需 textBox1 為 public 或 internal
// FormB.cs
public event Action DataSubmitted;
private void btnOK_Click(object sender, EventArgs e) {
DataSubmitted?.Invoke(txtInput.Text);
this.Close();
}
// FormA.cs
var formB = new FormB();
formB.DataSubmitted += s => { textBox1.Text = s; };
formB.ShowDialog();
| 場景 | 推薦方式 |
|---|---|
| 單向傳遞、模態/非模態均可 | 構造函數 / 屬性 |
| 需雙向交互、即時同步 | 事件 / 委託 |
| B 需訪問 A 多個控件/邏輯 | 傳遞接口 (interface) 而非 FormA 實例 |