用多种方法实现由form1打开的两个子窗体form2和form3两个子窗体通信,具体举例说明
时间: 2024-05-01 19:23:27 浏览: 29
可以通过以下几种方法实现由form1打开的两个子窗体form2和form3两个子窗体通信:
1. 通过委托实现通信:
在form1中定义一个委托:
```c#
public delegate void SendMessageHandler(string message);
public event SendMessageHandler SendMessageEvent;
```
在form2和form3中分别订阅委托:
```c#
private void Form2_Load(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
form1.SendMessageEvent += new Form1.SendMessageHandler(ReceiveMessage);
}
private void Form3_Load(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
form1.SendMessageEvent += new Form1.SendMessageHandler(ReceiveMessage);
}
```
在form2和form3中实现接收消息的方法:
```c#
private void ReceiveMessage(string message)
{
MessageBox.Show("Form2/Form3: " + message);
}
```
在form1中触发SendMessageEvent事件:
```c#
private void button1_Click(object sender, EventArgs e)
{
SendMessageEvent?.Invoke(textBox1.Text);
}
```
2. 通过静态变量实现通信:
在form1中定义一个静态变量:
```c#
public static string Message;
```
在form2和form3中分别读取该变量:
```c#
private void Form2_Load(object sender, EventArgs e)
{
textBox1.Text = Form1.Message;
}
private void Form3_Load(object sender, EventArgs e)
{
textBox1.Text = Form1.Message;
}
```
在form1中修改Message变量的值:
```c#
private void button1_Click(object sender, EventArgs e)
{
Form1.Message = textBox1.Text;
}
```
3. 通过事件实现通信:
在form1中定义一个事件:
```c#
public event EventHandler<MessageEventArgs> SendMessageEvent;
public class MessageEventArgs : EventArgs
{
public string Message { get; set; }
}
```
在form2和form3中分别订阅该事件:
```c#
private void Form2_Load(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
form1.SendMessageEvent += new EventHandler<Form1.MessageEventArgs>(ReceiveMessage);
}
private void Form3_Load(object sender, EventArgs e)
{
Form1 form1 = (Form1)this.Owner;
form1.SendMessageEvent += new EventHandler<Form1.MessageEventArgs>(ReceiveMessage);
}
```
在form2和form3中实现接收消息的方法:
```c#
private void ReceiveMessage(object sender, Form1.MessageEventArgs e)
{
MessageBox.Show("Form2/Form3: " + e.Message);
}
```
在form1中触发SendMessageEvent事件:
```c#
private void button1_Click(object sender, EventArgs e)
{
SendMessageEvent?.Invoke(this, new Form1.MessageEventArgs() { Message = textBox1.Text });
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)