三层的学习笔记-----利用EventHandler进行窗体间的对象传值
主窗体:
1 public PersonOne() 2 { 3 InitializeComponent(); 4 } 5 //第一步:定义一个eventHandler事件 6 public event EventHandler evtPerson; 7 private void button1_Click(object sender, EventArgs e) 8 { 9 Person p = new Person(); 10 try 11 { 12 //将文本框中的内容存到Person对象中 13 14 p.Name = txtName.Text; 15 p.Age = Convert.ToInt32(txtAge.Text); 16 p.Gender = cmbGender.Text; 17 18 } 19 catch (Exception) 20 { 21 22 MessageBox.Show("输入有误"); 23 } 24 25 //第三步:new一个窗体2的对象用来调用窗体2中的方法,并且绑定事件 26 frmShowPerson fsp=new frmShowPerson(); 27 evtPerson += fsp.SetPerson; 28 //第四步:判断事件是否为空 29 if (evtPerson!=null) 30 { 31 //第五步:创建一个要传递的参数类,将要传递的参数存储在事件的属性中 32 frmEventArgs fea = new frmEventArgs(); 33 fea.obj = p; 34 //第六步:调用事件 35 evtPerson(this, fea); 36 //为窗体2关闭的时候注册一个清空窗体1内容的事件 37 fsp.FormClosed += fsp_FormClosed; 38 39 fsp.ShowDialog(); 40 } 41 42 43 } 44 45 void fsp_FormClosed(object sender, FormClosedEventArgs e) 46 { 47 this.txtAge.Clear(); 48 this.txtName.Clear(); 49 } 50 51 private void PersonOne_Load(object sender, EventArgs e) 52 { 53 cmbGender.Text = "请选择"; 54 } 55 }
子窗体:
1 public partial class frmShowPerson : Form 2 { 3 public frmShowPerson() 4 { 5 InitializeComponent(); 6 } 7 //第二步:在窗体2中创建一个参数和返回值和eventHangdler一样的方法 8 public void SetPerson(object obj, EventArgs e) 9 { 10 //第七步:将传过来的object转成未传递之前的对象进行调用 11 frmEventArgs fea = e as frmEventArgs; 12 Person p2 = fea.obj as Person; 13 txtName.Text = p2.Name; 14 txtAge.Text = p2.Age.ToString(); 15 txtGender.Text = p2.Gender.ToString(); 16 17 } 18 }
类窗体:
1 public class frmEventArgs:EventArgs 2 { 3 /// <summary> 4 /// 要传递的对象 5 /// </summary> 6 public object obj { get; set; } 7 }
1 public class Person 2 { 3 private string _name; 4 5 public string Name 6 { 7 get { return _name; } 8 set { _name = value; } 9 } 10 private int _age; 11 12 public int Age 13 { 14 get { return _age; } 15 set { _age = value; } 16 } 17 private string _gender; 18 19 public string Gender 20 { 21 get { return _gender; } 22 set { _gender = value; } 23 }
浙公网安备 33010602011771号