C# 委托跨窗体调用事件
两种,一个父窗体调用子窗体,另一个子窗体调用父窗体
父窗体代码
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace WForm 12 { 13 public partial class 委托父窗体 : Form 14 { 15 public 委托父窗体() 16 { 17 InitializeComponent(); 18 } 19 20 private void button1_Click(object sender, EventArgs e) 21 { 22 委托子窗体 frm = new 委托子窗体(); 23 //子窗体订阅父窗体事件 24 frm.父窗体事件声明 += new 委托子窗体.委托父窗体事件定义(修改父窗体数据); 25 frm.Show(this); 26 } 27 /// <summary> 28 /// 父窗体事件 29 /// </summary> 30 /// <param name="新数据"></param> 31 void 修改父窗体数据(string 新数据) 32 { 33 textBox1.Text = 新数据; 34 } 35 36 /// <summary> 37 /// 这里的委托是用来调用子窗体事件 38 /// </summary> 39 public delegate void 委托子窗体事件定义(string 新数据); 40 public event 委托子窗体事件定义 子窗体事件声明; 41 /// <summary> 42 /// 开始调用子窗体事件 43 /// </summary> 44 /// <param name="sender"></param> 45 /// <param name="e"></param> 46 private void button2_Click(object sender, EventArgs e) 47 { 48 子窗体事件声明(textBox1.Text); 49 } 50 } 51 }
子窗体代码
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace WForm 12 { 13 public partial class 委托子窗体 : Form 14 { 15 /// <summary> 16 /// 这里的委托是用来调用父窗体事件 17 /// </summary> 18 public delegate void 委托父窗体事件定义(string 新数据); 19 public event 委托父窗体事件定义 父窗体事件声明; 20 public 委托子窗体() 21 { 22 InitializeComponent(); 23 } 24 25 /// <summary> 26 /// 调用父窗体事件 27 /// </summary> 28 /// <param name="sender"></param> 29 /// <param name="e"></param> 30 private void button1_Click(object sender, EventArgs e) 31 { 32 父窗体事件声明(textBox1.Text); 33 } 34 35 private void 委托子窗体_Load(object sender, EventArgs e) 36 { 37 委托父窗体 frm = (委托父窗体)this.Owner; 38 //父窗体订阅子窗体事件 39 frm.子窗体事件声明 += new 委托父窗体.委托子窗体事件定义(修改子窗体数据); 40 } 41 void 修改子窗体数据(string 新数据) 42 { 43 textBox1.Text = 新数据; 44 } 45 } 46 }