C# winform 弹出窗体给父窗体传值
Winform程序有很多传值的方法,抱着学习的态度。利用委托注册事件的方法,给窗体统一添加事件:
首先定义一个Frm_Base:
1 namespace 任意 2 { 3 public partial class Frm_base : Form 4 { 5 public delegate void InitHandler(BaseDTO dto); //声明初期化窗体委托 6 public event InitHandler InitEvent; //声明初期化窗体事件 7 8 #region 由子窗体调用的事件 9 10 public void doInitCustomerEvent(BaseDTO customer) 11 { 12 InitEvent += this.initCustomer; 13 InitEvent(customer); 14 } 15 #endregion 16 17 #region 需要被重写的方法 18 19 public virtual void initCustomer(BaseDTO customer) 20 { 21 return; 22 } 23 #endregion 24 } 25 }
然后在需要接受值得父窗体中继承 Frm_Base, 并且重写Base类中的方法:
1 override public void initCustomer(BaseDTO _dto)
具体的方法,根据具体的需求来写,需要子窗体传过来的值就定义在参数里
之后是调用子窗体。不要问已经把this传给了子窗体,直接调用方法就行了,为什么还要用委托。
你的子窗体是为了复用而存在,我们需要他只知道base调用了他,而他给base返回值。
1 Frm_House_List fhs = new Frm_House_List(this); 2 fhs.ShowDialog();
子窗体来调用事件:
1 namespace 任意 2 { 3 public partial class Frm_House_List : Form 4 { 5 Frm_base frm; 6 7 private Frm_House_List()//屏蔽掉无参数的构造方法 8 { 9 InitializeComponent(); 10 } 11 12 public Frm_House_List(Frm_base _frm) 13 { 14 this.frm = _frm; 15 InitializeComponent(); 16 } 17 private void btn_Click(object sender, EventArgs e) 18 { 19 20 frm.doInitCustomerEvent(new Customer());//委托父窗体初期化方法 21 22 this.Close(); 23 } 24 } 25 }
执行的则是你在父窗体重写的方法。
- 上一篇 »javascript 子窗体父窗体相互传值
- 下一篇 »关闭C#主窗体弹出是否关闭对话框