我需要更新动态创建的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
}
答案 0 :(得分:6)
我不确定你到底想要实现什么。但在我看来,你可以遍历已打开表单的集合:
var formsList = Application.OpenForms.OfType<Form2>();
listBox.Items.AddRange(formsList.Select(f=>f.Text).ToArray());
这一行将为您提供应用程序中所有打开的Form2实例的IEnumerable。您可能希望使用自己的字符串表示形式(而不是上面代码段中使用的表单标题)
答案 1 :(得分:3)
我会将所有Form2引用添加到arrayList(其他一些其他集合类,例如List)
/// form1
List<Form2> list = new List<Form2>();
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事件)