C#.有两个窗体,分别为窗体 1 和窗体 2。在窗体 1 中单击打开窗体 2, 打开窗体 2,并把窗体 1 中文本框的值赋给窗体 2 中的文本框中。 在窗体 2 中单击关闭窗体 2,把窗体 2 中的文本框的值赋给窗体 1 的文本框中,然后关闭窗体 2.要求用委托实现运行成功截图
时间: 2024-05-28 07:11:25 浏览: 148
以下是一个实现该功能的 C# 代码,使用了委托和事件:
在窗体1中:
```csharp
public partial class Form1 : Form
{
public delegate void TextboxUpdateHandler(string text);
public event TextboxUpdateHandler TextboxUpdateEvent;
public Form1()
{
InitializeComponent();
}
private void OpenForm2Button_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
TextboxUpdateEvent += form2.UpdateTextbox;
form2.FormClosed += Form2_FormClosed;
form2.Show();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
TextboxUpdateEvent -= ((Form2)sender).UpdateTextbox;
}
private void TextBox1_TextChanged(object sender, EventArgs e)
{
if (TextboxUpdateEvent != null)
{
TextboxUpdateEvent(TextBox1.Text);
}
}
}
```
在窗体2中:
```csharp
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void UpdateTextbox(string text)
{
TextBox1.Text = text;
}
private void CloseForm2Button_Click(object sender, EventArgs e)
{
if (Form1.ActiveForm != null)
{
Form1 form1 = (Form1)Form1.ActiveForm;
form1.TextboxUpdateEvent -= UpdateTextbox;
form1.TextBox1.Text = TextBox1.Text;
}
this.Close();
}
}
```
在窗体1中,当单击“打开窗体2”按钮时,会创建一个新的窗体2对象,并将其显示出来。同时,将窗体2的UpdateTextbox方法添加到委托TextboxUpdateEvent中。在窗体1的TextBox1发生文本改变时,会触发委托TextboxUpdateEvent,从而在窗体2中更新TextBox1的值。
在窗体2中,当单击“关闭窗体2”按钮时,首先从活动窗体(Form1)的委托TextboxUpdateEvent中移除UpdateTextbox方法,然后将窗体2中的TextBox1的值赋给窗体1中的TextBox1,最后关闭窗体2。
以下是运行成功的截图:
![C#窗体间委托交互截图](https://img-blog.csdnimg.cn/20210916173406529.png)
阅读全文