C#窗体传值实例汇总
简介
在C#窗体应用程序中,传递数据是非常常见的需求,本文将对C#窗体传值相关知识进行汇总与讲解,包括如何在不同窗体间传递数据、如何使用委托传递数据、如何使用事件传递数据等。
不同窗体间传递数据
方法一:通过构造函数传值
在窗体A中,对窗口B进行实例化时,通过构造函数传递参数即可。
// 窗体A
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(textBox1.Text);
form2.Show();
}
// 窗体B
public partial class Form2 : Form
{
private string str;
public Form2(string str)
{
InitializeComponent();
this.str = str;
}
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = str;
}
}
方法二:通过属性传值
在窗体A中,对窗口B进行实例化后,通过属性传递参数即可。
// 窗体A
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Str = textBox1.Text;
form2.Show();
}
// 窗体B
public partial class Form2 : Form
{
private string str;
public string Str
{
get { return str; }
set { str = value; }
}
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = str;
}
}
使用委托传递数据
委托基本概念
委托是C#中一种非常重要的类型,它类似于C/C++中的函数指针,是对函数的封装。使用委托可以将一个方法作为参数传递给另外一个方法。
// 定义委托
delegate void MyDelegate(string str);
// 定义方法
private void Method1(string str)
{
Console.WriteLine(str);
}
private void Method2(MyDelegate myDelegate)
{
myDelegate("Hello World!");
}
MyDelegate myDelegate = new MyDelegate(Method1);
Method2(myDelegate);
使用委托传值
在窗体A中,定义一个委托并实现对应的方法,在窗体B中定义一个委托类型的事件,当窗体B中的事件被触发时,进行委托调用即可。
// 窗体A
public delegate void MyDelegate(string str);
public event MyDelegate MyEvent;
private void button1_Click(object sender, EventArgs e)
{
MyEvent(textBox1.Text);
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2();
MyEvent += new MyDelegate(form2.ShowString);
}
// 窗体B
public partial class Form2 : Form
{
public void ShowString(string str)
{
label1.Text = str;
}
public Form2()
{
InitializeComponent();
}
}
使用事件传递数据
事件基本概念
事件是C#中一种非常重要的机制,用于响应特定的动作。事件类似于委托,由委托类型的变量和与其相关联的事件方法(也称为处理方法)组成。
public delegate void MyDelegate(string str);
public class MyClass
{
public event MyDelegate MyEvent;
public void Method(string str)
{
if (MyEvent != null)
{
MyEvent(str);
}
}
}
public class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.MyEvent += new MyDelegate(Method1);
myClass.Method("Hello World!");
}
private static void Method1(string str)
{
Console.WriteLine(str);
}
}
使用事件传值
在窗体A中,定义一个事件并实现对应的方法,在窗体B中定义一个事件的委托类型的字段,当窗体B中的事件被触发时,进行委托调用即可。
// 窗体A
public delegate void MyDelegate(string str);
public event MyDelegate MyEvent;
private void button1_Click(object sender, EventArgs e)
{
if (MyEvent != null)
{
MyEvent(textBox1.Text);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Form2 form2 = new Form2();
MyEvent += new MyDelegate(form2.ShowString);
}
// 窗体B
public partial class Form2 : Form
{
public event MyDelegate MyEvent;
private string str;
public Form2()
{
InitializeComponent();
MyEvent += new MyDelegate(ShowString);
}
private void button1_Click(object sender, EventArgs e)
{
if (MyEvent != null)
{
MyEvent(textBox1.Text);
}
}
public void ShowString(string str)
{
this.str = str;
label1.Text = str;
}
}
以上是传递数据的三种方式,根据实际需求选择对应的方法即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#窗体传值实例汇总 - Python技术站