Как выгрузить все открытые формы в VB.NET?

В середине преобразования кода VB6 в VB.NET мне нужно заменить следующий код, который намеревается закрыть все открытые формы, оставшиеся в приложении.

'close all sub forms
For i = My.Application.OpenForms.Count - 1 To 1 Step -1
    'UPGRADE_ISSUE: Unload Forms() was not upgraded. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="875EBAD7-D704-4539-9969-BC7DBDAA62A2"'
    Unload(My.Application.OpenForms(i))
Next i

Я заменил Unload функцию на Close (как указано в TFM ), но компилятор жалуется, что OpenForms не является членом My.Application .

Где я могу получить доступ к открытым формам?

Ответов (5)

Решение

OpenForms Свойство возвращает FormCollection . Вы можете перебирать коллекцию для обработки всех форм.

For each f as Form in My.Application.OpenForms
 f.Close()
Next

Application.Exit будет делать то же самое.

Я полагаю, вы все равно хотите закрыть приложение, если все формы закрыты.

My.Application.OpenForms требует, чтобы приложение VB.Net использовало Application Framework (см. Свойства проекта, Приложение, Включить платформу приложений).

Если вы не используете Application Framework, вы можете вместо этого использовать Application.OpenForms (из пространства имен System.Windows.Forms).

Посмотрите на Application.Windowsсобственность.

Я обнаружил это решение,

'close all sub forms
For i = System.Windows.Forms.Application.OpenForms.Count - 1 To 1 Step -1
    Dim form As Form = System.Windows.Forms.Application.OpenForms(i)
    form.Close()
Next i

... что выглядит неплохо (если не многословно), и я смогу протестировать его, как только смогу скомпилировать все остальное ..