Question

So far i have some code that allows a user to Hit F1 which loads a new form of the same properties and then hides the one the first one they had up, Hitting F2, allows the user to close the newly opened form and show the one they opened first. I would like a restriction that allows the user to open only 1 extra form if they hit F1 with 2 of the same forms open then a messagebox appears telling them to close the second form first otherwise allow it to be opened.

Here is what i have so far.

 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

Maybe something like if fOpen = true then disallow the user to hit F1? Not quite sure, but im close.

Was it helpful?

Solution

Forgive me if my VB6 is a little off, but you need to enumerate though the Forms collection to check to see if your form is already open...

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

See this.

-- EDIT --

Just while I think on, to tune your code you could use a numeric iteration...

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

-- EDIT 2 --

Just a further note on this. You may also want to introduce a counter so that you can check to see if there are two fields as in your original post...

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top