Возникли проблемы с show / hide / visible в VB .net. Это работает только в первый раз. - PullRequest
0 голосов
/ 30 октября 2018

У меня есть приложение для нескольких форм, я близок к завершению, но у меня ОГРОМНАЯ проблема. Мне нужно держать основную форму открытой, в основном коммуникационную задачу, которая открывает другие формы, которые отображают общее состояние и запрашивает различные пользовательские данные. Проблема заключается в том, что когда любая форма запрашивается либо автоматически по состоянию из механизма связи, либо через нажатие кнопки пользователя. При первом запросе формы проблем не возникает, однако при втором запросе любой данной формы она отображается на панели задач Windows, но не открывается на экране. Все переключения форм в этом приложении обрабатываются одной и той же процедурой. ПРИМЕЧАНИЕ. Форма с именем «WEDGE_MENU_SCREEN» - это форма, которая остается открытой и активной, только одна другая форма должна быть активной в любое время. Вот код.

 Public Function GoToForm(Requested_form As Form) As Boolean
    'in a multi form app, we only want ONE form active on screen at any given time.
    'all screen change requests should come from the same operating thread
    Dim Not_found_form As Boolean = True
    '        Dim frm As Form
    Dim formNames As New List(Of String)
    Dim xformNames As New List(Of String)

    'get a list of active forms running under this main thread LESS the static one
    For Each currentForm As Form In Application.OpenForms
        If currentForm.Name <> "WEDGE_MENU_SCREEN" Then
            formNames.Add(currentForm.Name)
        End If
    Next
    'from that list create another less the requested in the case that the requested form is already up
    For Each currentFormName As String In formNames
        If currentFormName <> Requested_form.Name Then
            xformNames.Add(currentFormName)
        End If
    Next
    'if the second list is not empty
    If xformNames.Count > 0 Then
        'hide all active forms in the second list
        For Each currentFormName As String In xformNames
            Application.OpenForms(currentFormName).Visible = False
            Application.OpenForms(currentFormName).Opacity() = 0
        Next
    End If

    'then activate the requested form
    Requested_form.Visible = True
    Requested_form.Opacity = 1
    Return True
End Function

ДОПОЛНИТЕЛЬНОЕ ПРИМЕЧАНИЕ: я также попробовал следующее Application.OpenForms (currentFormName) .hide () с Requested_form.Show () ТАКЖЕ Application.OpenForms (currentFormName) .close () с Requested_form.Show ()

Любая помощь будет принята с благодарностью. -Джим

1 Ответ

0 голосов
/ 30 октября 2018

Может быть, если вы сделаете логику немного проще, это поможет. 3 цикла могут быть объединены в один.

For Each currentForm As Form In Application.OpenForms
    If currentForm.Name <> "WEDGE_MENU_SCREEN" AndAlso currentForm.Name <> Requested_form.Name Then
        currentForm.Visible = False
        currentForm.Opacity() = 0
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...