Как я могу просмотреть все открытые экземпляры определенной формы? - PullRequest
1 голос
/ 10 января 2011

Мне нужно обновить ListBox формы Form2, созданной динамически. Допустим, в случае, когда мне нужно обновить этот 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
}

Ответы [ 2 ]

6 голосов
/ 10 января 2011

Я не уверен, что именно вы хотите реализовать. Но мне кажется, что вы можете просто перебрать коллекцию открытых форм:

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

Эта строка даст вам IEnumerable всех открытых экземпляров Form2 в вашем приложении. Возможно, вы захотите использовать собственное строковое представление (а не заголовок формы, использованный во фрагменте выше)

3 голосов
/ 10 января 2011

Я бы добавил все ссылки 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 закрыт, удалите его из списка (здесь: при событии formClosed)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...