在C#中,窗体form1里定义了private List<string> Values = new List<string>();并写入数据。在窗体form2如何读取value
时间: 2024-11-25 17:13:16 浏览: 23
在C#中,如果想在Form2中访问Form1里的变量`Values`,你需要通过事件委派或者共享数据结构的方式来实现。这里有两种常见的做法:
**1. 使用静态成员**: 如果`Values`对所有窗体来说都是全局可用的,可以在一个公共类或者Form1本身中声明为静态成员。例如:
```csharp
public static class SharedData
{
public static List<string> Values = new List<string>();
}
// Form1 中写入数据
SharedData.Values.Add("Data");
// Form2 中读取数据
List<string> valuesFromForm1 = SharedData.Values;
```
**2. 使用属性**: 如果你想在两个窗体间更安全地传递数据,可以创建一个公共的属性,并在每个窗体上设置getter和setter方法:
```csharp
public partial class Form1 : Form
{
private List<string> _values;
// Form1 写入数据
public List<string> Values
{
get => _values;
set => _values = value;
}
// ...
}
// 在 Form2 上获取数据
List<string> valuesFromForm1 = ((Form1)this.Owner).Values;
```
**3. 使用事件**: 如果是单向的数据交换(比如Form1关闭后,其数据传给Form2),可以考虑事件通知的方式:
```csharp
public delegate void DataChangedEventHandler(List<string> data);
public partial class Form1 : Form
{
public event DataChangedEventHandler DataChanged;
// ...
private void UpdateValues(List<string> values)
{
this.Values = values;
OnValueChanged(values);
}
protected virtual void OnValueChanged(List<string> values)
{
if (DataChanged != null)
DataChanged(values);
}
}
// Form2 读取数据
public partial class Form2 : Form
{
private void Form2_Load(object sender, EventArgs e)
{
((Form1)Owner).DataChanged += OnForm1ValueChanged;
}
private void OnForm1ValueChanged(List<string> values)
{
this.Values = values; // 更新本地的Values
}
}
```
请根据实际需求选择合适的方法。
阅读全文