C# WinForms父子窗体传值详解
|
admin
2024年12月1日 8:41
本文热度 104
|
在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 编辑过