C# 委托跨窗体调用事件

发布时间 2023-08-03 14:12:32作者: En'

两种,一个父窗体调用子窗体,另一个子窗体调用父窗体

父窗体代码

 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 }