在C# WinForms中,父窗體與子窗體之間傳值是一個常見的需求。以下是詳細的實現步驟和示例代碼。
1. 創建父窗體
首先,創建一個父窗體,里面有一個按鈕,用于打開子窗體。
// ParentForm.csusing System;using System.Windows.Forms;
public class ParentForm : Form{
private Button openChildButton;
private Label displayLabel;
public ParentForm()
{
openChildButton = new Button() { Text = "打開子窗體", Left = 50, Top = 20 };
displayLabel = new Label() { Left = 50, Top = 60, Width = 200 };
openChildButton.Click += OpenChildButton_Click;
Controls.Add(openChildButton);
Controls.Add(displayLabel);
}
private void OpenChildButton_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm();
childForm.ValuePassed += ChildForm_ValuePassed; // 訂閱子窗體傳值事件
childForm.Show(); // 顯示子窗體
}
private void ChildForm_ValuePassed(object sender, string value)
{
displayLabel.Text = "接收到的值: " + value; // 更新父窗體的標簽
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new ParentForm());
}}
2. 創建子窗體
接下來,創建一個子窗體,里面有一個文本框和一個按鈕,當按鈕被點擊時,將文本框的內容傳遞回父窗體。
// ChildForm.csusing System;using System.Windows.Forms;
public class ChildForm : Form{
private TextBox inputTextBox;
private Button sendButton;
public event EventHandlerValuePassed; // 聲明事件
public ChildForm()
{
inputTextBox = new TextBox() { Left = 20, Top = 20, Width = 200 };
sendButton = new Button() { Text = "發送值", Left = 20, Top = 60 };
sendButton.Click += SendButton_Click;
Controls.Add(inputTextBox);
Controls.Add(sendButton);
}
private void SendButton_Click(object sender, EventArgs e)
{
// 觸發事件,將值傳遞回父窗體
ValuePassed?.Invoke(this, inputTextBox.Text);
this.Close(); // 關閉子窗體
}}
3. 運行程序
父窗體會有一個按鈕“打開子窗體”,點擊后會打開子窗體。
在子窗體中輸入一些文本并點擊“發送值”按鈕,此時文本框中的值會通過事件傳遞給父窗體。
父窗體會顯示接收到的值。
關鍵點說明:
事件:為了實現父子窗體之間的通信,使用了事件 ValuePassed,這個事件在子窗體中定義,并在發送值的的方法中被觸發。
事件訂閱:父窗體在創建子窗體后,通過 += 運算符訂閱了子窗體的事件,來處理值的接收。
通過以上步驟,您可以實現父子窗體之間的值傳遞。希望這個示例對您有所幫助!
該文章在 2024/12/4 15:25:38 編輯過