在C# WinForms中,父窗體與子窗體之間傳值是一個(gè)常見的需求。以下是詳細(xì)的實(shí)現(xiàn)步驟和示例代碼。
1. 創(chuàng)建父窗體
首先,創(chuàng)建一個(gè)父窗體,里面有一個(gè)按鈕,用于打開子窗體。
// 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; // 更新父窗體的標(biāo)簽
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new ParentForm());
}}
2. 創(chuàng)建子窗體
接下來,創(chuàng)建一個(gè)子窗體,里面有一個(gè)文本框和一個(gè)按鈕,當(dāng)按鈕被點(diǎn)擊時(shí),將文本框的內(nèi)容傳遞回父窗體。
// 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 = "發(fā)送值", Left = 20, Top = 60 };
sendButton.Click += SendButton_Click;
Controls.Add(inputTextBox);
Controls.Add(sendButton);
}
private void SendButton_Click(object sender, EventArgs e)
{
// 觸發(fā)事件,將值傳遞回父窗體
ValuePassed?.Invoke(this, inputTextBox.Text);
this.Close(); // 關(guān)閉子窗體
}}
3. 運(yùn)行程序
父窗體會(huì)有一個(gè)按鈕“打開子窗體”,點(diǎn)擊后會(huì)打開子窗體。
在子窗體中輸入一些文本并點(diǎn)擊“發(fā)送值”按鈕,此時(shí)文本框中的值會(huì)通過事件傳遞給父窗體。
父窗體會(huì)顯示接收到的值。
關(guān)鍵點(diǎn)說明:
事件:為了實(shí)現(xiàn)父子窗體之間的通信,使用了事件 ValuePassed,這個(gè)事件在子窗體中定義,并在發(fā)送值的的方法中被觸發(fā)。
事件訂閱:父窗體在創(chuàng)建子窗體后,通過 += 運(yùn)算符訂閱了子窗體的事件,來處理值的接收。
通過以上步驟,您可以實(shí)現(xiàn)父子窗體之間的值傳遞。希望這個(gè)示例對(duì)您有所幫助!
該文章在 2024/12/4 15:25:38 編輯過