C#窗体间数据的传递(事件)
窗体间数据的传递,顾名思义至少两个窗体才能进行数据的传递。以下内容为两个窗体间数据的穿的传递。
(一) Form1(没有实例化的父窗体) 窗体向下一个窗体(Form2 用new运算子申请出来的实例对象,子窗体)进行数据的传递。这一个比较简单:在Form2 中声明一个公有的数据成员,在Form2 展示之前对实例Form2 的数据成员进行赋值即可。
(二)Form2 窗向Form1 窗体进行数据的传递:需要用到事件(委托)。
以例题为例:
该程序的执行过程是这样的:在第一个窗体输入第一个加数,点击按钮后在第二个窗体输入第二个加数再点击按钮,进行运算并把结果返回到第一个窗体。
首先:运用方法一将第一个加数传到第二个窗体,通过form2 的共有的成员函数。
/**
* Form1 的点击事件
*/
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();//创建一个Form2 的实例对象
form2.addNumber1 = Convert.ToDouble(textBox1.Text);//Form1——>Form2实现参数的传递
//form2.Send += new Form2.SendNumber(Add);//关键(触发事件)
form2.Show();
}
其次:关键的一步就是将另一个加数和结果传到第一个窗体,两个参数传递的类型一样,需要运用事件,将两个变量作为事件函数的两个参数。
在Form2 中:
//委托的定义(一)
public delegate void SendNumber(double a,double b);
//实例化对象(二)
public event SendNumber Send;
// 加数变量
public double addNumber1;
/**
* Form2 的点击事件
*/
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = (Convert.ToDouble(textBox1.Text) + addNumber1).ToString();//将计算结果赋值给Form2 的结果TextBox
Send(Convert.ToDouble(textBox1.Text), Convert.ToDouble(textBox1.Text)+addNumber1);//触发事件(四)
MessageBox.Show("延时5秒","提示");
YanShi();
//this.Show();
this.Close();
}
在Form1中:
/**
* Form点击事件
*/
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
//Form1——>Form2
form2.addNumber1 = Convert.ToDouble(textBox1.Text);
//关键(关联事件)(三)Form2.SendNumber
form2.Send += new Form2.SendNumber(Add);
form2.Show();
}
/**
* 展示数据
*/
public void Add ( double addNumber ,double aluter) //Form2 ——>Form1
{
textBox2.Text = addNumber.ToString();
textBox3.Text = aluter.ToString();
}
事件基本分为四步:
1、声明委托(Form2 )
2、实例化委托对象(Form2 )
3、事件关联(Form1 )关联Form1 的共有的成员函数,将两个参数传递到Form1 中
4、触发事件(Form2 )