Как заполнить список списком всех открытых форм

У меня есть форма со списком, и я хочу иметь возможность заполнить ее всеми открытыми формами одного и того же приложения. Однако я хочу иметь возможность выбрать элемент из списка и закрыть форму, связанную с этим элементом в списке. Возможно ли это сделать?


person TheRyan722    schedule 30.06.2013    source источник


Ответы (2)


Я нашел ответ на вопрос. Работает следующий код:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  Dim myForms As FormCollection = Application.OpenForms

  For Each frmName As Form In myForms
    ListBox1.Items.Add(frmName.Name.ToString)
  Next
End Sub

Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  If Not ListBox1.SelectedIndex = -1 Then
    Dim myForm As Form = Application.OpenForms(ListBox1.Text)
    myForm.Close()
  End If
End Sub

Где код под ListBox1_SelectedIndexChanged можно очень легко поместить в кнопку.

person TheRyan722    schedule 30.06.2013

My.Application.OpenForms — это набор открытых формы в вашем проекте. Итак, что-то вроде:

For Each f As Form In My.Application.OpenForms
    Me.SomeListBox.Items.Add(f)
Next

Затем, чтобы закрыть выбранный элемент,

DirectCast(Me.SomeListBox.SelectedItem, Form).Close()
person Ry-♦    schedule 30.06.2013
comment
Просто предложение @minitech; вы не можете добавить форму в список :) вы можете изменить это на: Me.SomeListBox.Items.Add(f.name) - person zaggler; 30.06.2013
comment
@MrCoDeXeR: Тогда близкая вещь сломается! Я не знаю, что такое строковое представление формы в ListBox, но оно каким-то образом появится. :) Add берет объект. (Хотя сейчас у меня нет Visual Studio…) - person Ry-♦; 30.06.2013
comment
Я проверил этот метод, и в списке отображаются пустые элементы, но элементы там есть, и если вы закроете один из элементов, вся программа закроется. - person TheRyan722; 30.06.2013
comment
@TheRyan722 TheRyan722, потому что вам нужно добавить имя приятеля формы; вместо просто ....Add(f) измените это на: (f.Name) - person zaggler; 30.06.2013
comment
@ TheRyan722: Измените настройки вашего проекта, чтобы он не закрывался при закрытии начальной формы. Мой проект › Применение, я считаю. - person Ry-♦; 30.06.2013
comment
Я нашел ответ и опубликовал его. - person TheRyan722; 30.06.2013