如何遍历特定表单的所有打开实例?

我需要更新动态创建的Form2的ListBox。 让我们说,如果我必须更新这个ListBox(当然在Form1中)我没有这个Form2的引用,所以我不能调用UpdateList方法(不,我不能让它静态) 。

我甚至不知道是否打开了Form2,它可能与否。

你有什么建议?

有没有办法循环使用Form2的所有开放性?

代码示例:

//Form1 public void event() { //UPDATE FORM2 LISTBOX } //SOMEWHERE IN FORM1 Form2 runTime = new Form2(); //Form2 public void UpdateList() { //UPDATE LISTBOX } 

我不确定你到底想要实现什么。 但在我看来,你可以迭代打开的表单集合:

 var formsList = Application.OpenForms.OfType(); listBox.Items.AddRange(formsList.Select(f=>f.Text).ToArray()); 

这一行将为您提供应用程序中所有打开的Form2实例的IEnumerable。 您可能希望使用自己的字符串表示forms(而不是上面代码段中使用的表单标题)

我会将所有Form2引用添加到arrayList(其他一些其他集合类,例如List)

 /// form1 List list = new List(); void createForm2(object sender, EventArgs e) { Form2 newForm = new Form2(); newForm.FormClosed += new FormClosedEventHandler(form2_closed); list.add(newForm); } void updateListBox() { for each (Form2 curform in list) { curform.updateListbox(); } } void form2_closed(object sender, FormClosedEventArgs e) { list.Remove(sender); updateListBox(); // in case a form2 instance is closed, recall method } /// form2 public void updateListbox() { // enter code here ... } 

如果Form2实例已关闭,请将其从列表中删除(此处:on formClosed事件)