实现C#窗体间传值详解("C#窗体间传值详细教程")

原创
ithorizon 6个月前 (10-21) 阅读数 30 #后端开发

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#窗体间传值技术。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: 后端开发


热门