Winform中父窗体和主窗体如何实现数据实时交换
时间: 2024-09-27 18:05:36 浏览: 36
C#实现winform用子窗体刷新父窗体及子窗体改变父窗体控件值的方法
在Windows Form (WinForm) 中,父窗体和主窗体之间实现实时数据交换通常有两种常用的方式:
1. **事件订阅/发布机制**:
- 主窗体(通常是应用程序的主要入口点)可以公开一些事件,如`ValueChanged`、`DataChanged`等。
- 父窗体或其他需要实时更新的数据组件可以在适当的时候订阅这些事件,并在接收到事件时更新它们的显示内容。
```csharp
public class MainForm : Form {
public event EventHandler<DataEventArgs> DataChanged;
private void UpdateData() {
// 更新数据...
OnDataChanged(new DataEventArgs(updatedData));
}
protected virtual void OnDataChanged(DataEventArgs e) {
DataChanged?.Invoke(this, e);
}
}
public class ParentForm : Form {
private MainForm mainForm;
public ParentForm(MainForm main) {
this.mainForm = main;
main.DataChanged += MainForm_DataChanged;
}
private void MainForm_DataChanged(object sender, DataEventArgs e) {
// 接收更新并处理
}
}
```
2. **共享公共数据容器**: 可以通过单例模式或者其他设计模式创建一个公共的数据访问类或静态变量,两者都可以从任何地方读写数据。
```csharp
public static class SharedData {
public static List<MyObject> Items { get; set; } = new List<MyObject>();
}
// 父窗体和主窗体分别操作和监听SharedData
public void AddItemToMainForm() {
SharedData.Items.Add(item);
OnDataChanged();
}
private void OnDataChanged() {
this.Invoke(new Action(() => // 在UI线程更新显示));
ParentForm.Instance.UpdateData(); // 或者直接触发其他窗口的更新方法
}
```
阅读全文