使用委托和事件从另一个表单更新表单

我一直忘记这是怎么做的..

我想从Form2更新主窗体上的UI而不创建窗体的实例。
我记得使用委托/事件并可能以某种方式传递第一个表单的实例,但完全是空白。

帮助我,谢谢。

从Form2向Form1上的listBox1添加一些东西。

是的,委托和事件是正确的关键词

在某处实现EventArgs类:

public class MyEventArgs : EventArgs { private List EventInfo; public MyEventArgs(List strings) { EventInfo = strings; } public List GetInfo() { return EventInfo; } } 

在Form2中:

 public class Form2 { public event EventHandler OnMyChange; //call it then you need to update: if(OnMyChange!= null) { MyEventArgs e = new MyEventArgs(); List content = new List(); content.Add("abc"); e.EventInfo = content; OnMyChange(this, e); } } 

在Form1中:

 Form2 MyForm2 = new Form2(); MyForm2.OnMyChange += MyChanged; static void MyChanged(object source, MyEventArgs e) { //e.EventInfo will contain list Console.WriteLine("changed"); } 

您无法更新未实例化的对象。

你可以做的是将一些函数注册为form2中的change事件的处理程序。 如果函数是主窗体的成员,则它可以影响该窗体的组件。

传递委托基本相同,但允许您使用您选择的任意function。 但大多数时候,这不值得花费。

很难从问题中得到你需要的内容,但听起来你可以将一个Action传递给你的表单以添加项目。 您可以在Form2中更改构造函数以确保始终具有回调 – 例如

  private Action addItemsToParent; public Form2(Action addItemsToParent) { this.addItemsToParent = addItemsToParent; } public void AddItems() { addItemsToParent("item 1"); }