实现C#窗体间传值详解("C#窗体间传值详细教程")
原创
一、引言
在C#的Windows窗体应用程序中,经常性需要在不同窗体之间传递数据。本文将详细介绍C#窗体间传值的多种方法,帮助开发者更好地懂得和掌握这一技术。
二、基本概念
在C#中,窗体间传值通常涉及到两个窗体:一个是发送数据的窗体(称为“父窗体”),另一个是接收数据的窗体(称为“子窗体”)。通过在父窗体和子窗体之间传递数据,可以实现数据在不同窗体之间的共享。
三、传值方法
3.1 使用公共属性传值
在子窗体中定义一个公共属性,父窗体通过这个属性来获取或设置数据。
public partial class ChildForm : Form
{
public string Message { get; set; }
public ChildForm()
{
InitializeComponent();
}
private void ChildForm_Load(object sender, EventArgs e)
{
// 显示父窗体传递的数据
label1.Text = Message;
}
}
在父窗体中,通过以下方法设置子窗体的公共属性:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm();
childForm.Message = "Hello, Child Form!";
childForm.Show();
}
}
3.2 使用委托传值
委托是一种特殊类型的委托,用于封装方法的调用。在子窗体中定义一个委托,并在父窗体中实现该委托。
public partial class ChildForm : Form
{
public delegate void PassData(string data);
public PassData passData;
public ChildForm()
{
InitializeComponent();
}
private void ChildForm_Load(object sender, EventArgs e)
{
if (passData != null)
{
passData("Hello, Parent Form!");
}
}
}
在父窗体中,实现子窗体的委托:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm();
childForm.passData = new ChildForm.PassData(DataReceived);
childForm.Show();
}
private void DataReceived(string data)
{
label1.Text = data;
}
}
3.3 使用事件传值
事件是一种特殊的委托,用于封装事件的发布和订阅。在子窗体中定义一个事件,并在父窗体中订阅该事件。
public partial class ChildForm : Form
{
public event EventHandler DataPassed;
public ChildForm()
{
InitializeComponent();
}
private void ChildForm_Load(object sender, EventArgs e)
{
if (DataPassed != null)
{
DataPassed(this, new DataPassedEventArgs("Hello, Parent Form!"));
}
}
}
// 定义事件参数类
public class DataPassedEventArgs : EventArgs
{
public string Data { get; private set; }
public DataPassedEventArgs(string data)
{
Data = data;
}
}
在父窗体中,订阅子窗体的事件:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm();
childForm.DataPassed += ChildForm_DataPassed;
childForm.Show();
}
private void ChildForm_DataPassed(object sender, DataPassedEventArgs e)
{
label1.Text = e.Data;
}
}
3.4 使用静态变量传值
在子窗体中定义一个静态变量,用于存储要传递的数据。父窗体通过访问这个静态变量来获取数据。
public partial class ChildForm : Form
{
public static string Message;
public ChildForm()
{
InitializeComponent();
}
private void ChildForm_Load(object sender, EventArgs e)
{
// 显示父窗体传递的数据
label1.Text = Message;
}
}
在父窗体中,设置子窗体的静态变量:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm.Message = "Hello, Child Form!";
ChildForm childForm = new ChildForm();
childForm.Show();
}
}
3.5 使用字典传值
在父窗体中创建一个字典,用于存储要传递的数据。在子窗体中,通过访问这个字典来获取数据。
public partial class ParentForm : Form
{
private Dictionary
dataDictionary; public ParentForm()
{
InitializeComponent();
dataDictionary = new Dictionary
(); }
private void button1_Click(object sender, EventArgs e)
{
dataDictionary["Message"] = "Hello, Child Form!";
ChildForm childForm = new ChildForm();
childForm.DataDictionary = dataDictionary;
childForm.Show();
}
}
public partial class ChildForm : Form
{
public Dictionary
DataDictionary { get; set; } public ChildForm()
{
InitializeComponent();
}
private void ChildForm_Load(object sender, EventArgs e)
{
if (DataDictionary != null && DataDictionary.ContainsKey("Message"))
{
label1.Text = DataDictionary["Message"];
}
}
}
四、总结
在C#窗体应用程序中,有多种方法可以实现窗体间传值。开发者可以依具体需求和场景选择合适的方法。本文详细介绍了五种常用的传值方法,包括使用公共属性、委托、事件、静态变量和字典。期望这篇文章能够帮助开发者更好地懂得和掌握C#窗体间传值技术。