我一直忘记这是怎么做到的。。
我想在不创建表单实例的情况下从 Form2 更新主表单上的 UI。
我记得使用委托/事件并可能以某种方式传入第一个表单的实例,但完全空白。
帮帮我,谢谢。
从 Form2 向 Form1 上的 listBox1 添加一些内容。
我一直忘记这是怎么做到的。。
我想在不创建表单实例的情况下从 Form2 更新主表单上的 UI。
我记得使用委托/事件并可能以某种方式传入第一个表单的实例,但完全空白。
帮帮我,谢谢。
从 Form2 向 Form1 上的 listBox1 添加一些内容。
是的,delegate 和 event 是正确的关键词
在某处实现您的 EventArgs 类:
public class MyEventArgs : EventArgs
{
private List<string> EventInfo;
public MyEventArgs(List<string> strings)
{
EventInfo = strings;
}
public List<string> GetInfo()
{
return EventInfo;
}
}
在表格 2 中:
public class Form2
{
public event EventHandler<MyEventArgs> OnMyChange;
//call it then you need to update:
if(OnMyChange!= null)
{
MyEventArgs e = new MyEventArgs();
List<string> content = new List<string>();
content.Add("abc");
e.EventInfo = content;
OnMyChange(this, e);
}
}
在表格 1 中:
Form2 MyForm2 = new Form2();
MyForm2.OnMyChange += MyChanged;
static void MyChanged(object source, MyEventArgs e)
{
//e.EventInfo will contain list
Console.WriteLine("changed");
}
您无法更新未实例化的对象。
您可以做的是将某些函数注册为 form2 中更改事件的处理程序。如果该函数是主窗体的成员,则它可以影响该窗体的组件。
传递委托基本相同,但允许您使用您选择的任意函数。不过,大多数时候这不值得开销。
很难从问题中得到你真正需要的东西,但听起来你可以将一个Action传递给你的表单来添加项目。您可以更改 Form2 中的构造函数以确保您始终拥有回调 - 例如
private Action<string> addItemsToParent;
public Form2(Action<string> addItemsToParent)
{
this.addItemsToParent = addItemsToParent;
}
public void AddItems()
{
addItemsToParent("item 1");
}