首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 窗體間數據傳遞:新建窗體 B 獲取窗體 A TextBox 值的三種方式

     編輯:程式設計綜合問答

場景:窗體 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

進階:事件回傳數據 (B → A)

// 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();

選擇建議

避免直接暴露控件 (public TextBox),封裝為屬性或方法,降低耦合,利於維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景推薦方式
單向傳遞、模態/非模態均可構造函數 / 屬性
需雙向交互、即時同步事件 / 委託
B 需訪問 A 多個控件/邏輯傳遞接口 (interface) 而非 FormA 實例