Желая разрешить открытие только 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