c# 使用委托 传值回父窗体子窗体
时间: 2024-12-22 09:27:35 浏览: 16
在C#中,委托是一种类型的别名,它代表对某种方法的引用。当你需要将一个事件处理程序从一个控件传递到另一个控件,如父窗体(Form)向子窗体(Child Form)传递数据,可以使用委托和事件。
首先,在子窗体(ChildForm.cs)上定义一个委托,比如:
```csharp
public delegate void DataReceivedEventHandler(object sender, EventArgs e, object data);
```
然后在子窗体中声明并初始化这个委托,用于接收来自父窗体的数据:
```csharp
private event DataReceivedEventHandler DataReceived;
```
接下来,在父窗体(ParentForm.cs)中创建一个方法,并通过`+=`操作符订阅子窗体的事件:
```csharp
public void SendDataToChild(string data)
{
// 创建匿名方法或自定义方法作为事件处理器
DataReceived += (sender, e, d) => {
// 在这里处理数据并发送给子窗体
ChildForm child = (ChildForm)sender; // 获取子窗体实例
child.ProcessData(data); // 调用子窗体的处理方法
};
// 触发事件,传递数据
if (childForm.IsHandleCreated)
{
DataReceived(this, new EventArgs(), data);
}
}
```
最后,在子窗体(ChildForm.cs)中定义一个方法来处理接收到的数据,并在需要的时候触发事件:
```csharp
public void ProcessData(string receivedData)
{
// 子窗体的处理逻辑...
OnDataReceived(receivedData); // 触发自定义的事件,假设已经实现了OnDataReceived方法
// 或者直接使用已声明的事件
DataReceived?.Invoke(this, EventArgs.Empty, receivedData);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// 注册子窗体事件,通常在窗口加载后
DataReceived += ParentForm_SendDataToChild;
}
// 父窗体事件名称,需要与在ParentForm.cs中注册的事件一致
private void ParentForm_SendDataToChild(object sender, EventArgs e, string data)
{
// 子窗体事件处理逻辑
}
```
阅读全文