Желая разрешить открытие только 2 одинаковых форм VB6

Пока у меня есть некоторый код, который позволяет пользователю нажать F1, который загружает новую форму с теми же свойствами, а затем скрывает тот, который был у первого, нажал F2, позволяет пользователю закрыть вновь открытую форму и показать один они открылись первыми. Я хотел бы иметь ограничение, позволяющее пользователю открывать только 1 дополнительную форму, если он нажимает клавишу F1 с двумя открытыми одинаковыми формами, а затем появляется окно сообщения, сообщающее ему, что сначала нужно закрыть вторую форму, в противном случае можно открыть ее.

Вот что у меня так далеко.

 Private Sub Form_Load()

 End Sub

 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

    Select Case KeyCode

        Case vbKeyF1
        'hides the current form
            Me.Hide
        'loads a new form with the same properties
            Dim f As New Form1
            Load f
        'shows this new form
            f.Show
        'says that the second form is open
            fOpen = True

        Case vbKeyF2
        'closes the second form
            Unload Me
        'says that the second form is closed
            fOpen = False
        'shows the first form you were on
            Form1.Show

    End Select
End Sub

Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

   'if your hitting "X" on second form then just close form2
   If fOpen = False Then
   Form1.Show
   Else
   'if your hitting "X" on main form close everything
   Unload Me
   End If

End Sub

Может быть, что-то вроде, если fOpen = true, а затем запретить пользователю нажимать F1? Не совсем уверен, но я рядом.

1 ответ

Решение

Простите, если мой VB6 немного выключен, но вам нужно перечислить хотя Forms коллекция, чтобы проверить, открыта ли ваша форма...

Dim frm As Form
For Each frm In Forms
    If frm.Name = "myForm" Then frm.Show()
Next frm

Смотрите это.

-- РЕДАКТИРОВАТЬ --

Пока я думаю, чтобы настроить ваш код, вы можете использовать числовую итерацию...

Dim f As Integer
Dim t As Integer
t = Forms.Count - 1
For f = 0 To t
    If Forms(f).Name = "myForm" Then Forms(f).Show()
Next frm

- РЕДАКТИРОВАТЬ 2 -

Просто еще одно замечание по этому поводу. Вы также можете ввести счетчик, чтобы проверить, есть ли два поля, как в исходном сообщении...

Dim frm As Form
Dim c As Integer
For Each frm In Forms
    If frm.Name = "myForm" Then 
        c = c + 1
        If c = 2 Then 
            frm.Show()
            Exit For 'Speed up the search if there are lots of forms
        End If
    End if
Next frm
Другие вопросы по тегам