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

raz*_*z3r 1 c# forms winforms

我需要更新动态创建的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
}
Run Code Online (Sandbox Code Playgroud)

def*_*ale 6

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

var formsList  = Application.OpenForms.OfType<Form2>();
listBox.Items.AddRange(formsList.Select(f=>f.Text).ToArray());
Run Code Online (Sandbox Code Playgroud)

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

  • +1当然,但也要考虑这个:http://stackoverflow.com/questions/3751554/application-openforms-count-0-always :) (2认同)