C# WinForm窗体之间传值有哪些
在C# WinForm应用程序中,窗体之间传值有多种方式,以下是几种常见的方法:
通过在目标窗体的构造函数中传递参数,可以将数据从源窗体传递到目标窗体。
// 源窗体
private void OpenTargetForm()
{
string data = "Hello, World!";
TargetForm targetForm = new TargetForm(data);
targetForm.Show();
}
// 目标窗体
public partial class TargetForm : Form
{
private string _data;
public TargetForm(string data)
{
InitializeComponent();
_data = data;
}
private void TargetForm_Load(object sender, EventArgs e)
{
// 使用传递过来的数据
label1.Text = _data;
}
}
在目标窗体中定义公共属性,通过设置属性值来传递数据。
// 源窗体
private void OpenTargetForm()
{
string data = "Hello, World!";
TargetForm targetForm = new TargetForm();
targetForm.Data = data;
targetForm.Show();
}
// 目标窗体
public partial class TargetForm : Form
{
public string Data { get; set; }
private void TargetForm_Load(object sender, EventArgs e)
{
// 使用传递过来的数据
label1.Text = Data;
}
}
通过事件机制,在目标窗体中触发事件,源窗体监听事件并获取数据。
// 目标窗体
public partial class TargetForm : Form
{
public event EventHandler<string> DataSent;
private void button1_Click(object sender, EventArgs e)
{
string data = "Hello, World!";
DataSent?.Invoke(this, data);
}
}
// 源窗体
private void OpenTargetForm()
{
TargetForm targetForm = new TargetForm();
targetForm.DataSent += TargetForm_DataSent;
targetForm.Show();
}
private void TargetForm_DataSent(object sender, string data)
{
// 处理接收到的数据
MessageBox.Show(data);
}
通过静态变量在窗体之间共享数据。
// 源窗体
private void OpenTargetForm()
{
string data = "Hello, World!";
SharedData.Data = data;
TargetForm targetForm = new TargetForm();
targetForm.Show();
}
// 目标窗体
public partial class TargetForm : Form
{
private void TargetForm_Load(object sender, EventArgs e)
{
// 使用共享的数据
label1.Text = SharedData.Data;
}
}
// 共享数据类
public static class SharedData
{
public static string Data { get; set; }
}
通过委托将数据从目标窗体传递回源窗体。
// 源窗体
private void OpenTargetForm()
{
TargetForm targetForm = new TargetForm();
targetForm.OnDataSent += TargetForm_OnDataSent;
targetForm.Show();
}
private void TargetForm_OnDataSent(string data)
{
// 处理接收到的数据
MessageBox.Show(data);
}
// 目标窗体
public partial class TargetForm : Form
{
public delegate void DataSentHandler(string data);
public event DataSentHandler OnDataSent;
private void button1_Click(object sender, EventArgs e)
{
string data = "Hello, World!";
OnDataSent?.Invoke(data);
}
}
这些方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。