使用委托和事件从另一个表单更新表单
我一直忘记这是怎么做的..
我想从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"); }