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