Как выгрузить все открытые формы в VB.NET? - PullRequest
3 голосов
/ 26 февраля 2009

В процессе преобразования кода 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 ]

11 голосов
/ 26 февраля 2009

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

For each f as Form in My.Application.OpenForms
 f.Close()
Next
7 голосов
/ 26 февраля 2009

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

'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

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

5 голосов
/ 26 февраля 2009

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

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

1 голос
/ 26 ноября 2012

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

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

0 голосов
/ 26 февраля 2009

Обратите внимание на свойство Application.Windows.

...