form reloads on it's own

i have a form that has a timer control.  in the form_unload procedure i make the timer.enabled=false.  sometimes the form reloads immediately after it's form_unload completes (happens intermittenylty, maybe once out 10, always randomly).  i have a feeling that even though the timer is disabled, a function that is called in the timer has not finished and is referencing a control's event after the form has unloaded, therefore the form reloads to facilitate the event.

is this plausible? and if so how can one prevent this from happening?
howardsdAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

EDDYKTCommented:
Do you have doevents in your code?
0
howardsdAuthor Commented:
no
0
devoted2christCommented:
Is disabling the timer the only thing in your form_unload procedure? And when the form reloads, is the timer enabled or disabled?
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

EDDYKTCommented:
shows us the queryunload routine
0
howardsdAuthor Commented:
here's the unload routine.  in the form_load routine the timer gets enabled.

Private Sub Form_Unload(Cancel As Integer)

On Error GoTo err
  Timer1.Enabled = False

  If dbvalueconnection.state = adStateOpen Then
    dbvalueconnection.Close
  End If

  closeRecordsets rsvalueread, rsvalueidread
 
  Screen.MousePointer = vbDefault
 
  Set dbvalueconnection = Nothing
  Set rsvalueread = Nothing
  Set rsvalueidread = Nothing

  Exit Sub
 
err:
  If err <> 0 Then
    MsgBox err.Source & "-->" & err.Description, vbOKOnly, "Form unload failure"
  End If
End Sub
0
devoted2christCommented:
Try putting a Sleep in there (after the disabling) to delay the rest of the events...
0
howardsdAuthor Commented:
with a Sleep(2000) i get the same result.  i close the form, its waits 2 seconds, closes, then the form pops right back up.  still occuring randomly, no real pattern for when it does/doesn't happen).
0
Mike TomlinsonMiddle School Assistant TeacherCommented:
I think you need to show us what is in the Timer routine.

Idle_Mind
0
howardsdAuthor Commented:
Private Sub Timer1_Timer()
Dim d As String

  d = String(200, 0)
  l = SCardComand(0, "Card,Info,Status", 0, nil, 0, d, 200)
  d = Left(d, InStr(d, Chr(0)) - 1)
 
  If l = 0 Then
    If d = "active" Then
      cardStatus.Caption = "card in reader"
      If iSnglRead = False Then
        ' if no problems during read and loyalty id the active screen make form able
        If fillForm = True Then
          cmdAdd.Enabled = True
          cmdSub.Enabled = True
          cmdWriteCustCrd.Enabled = True
          cmdWriteRetailerCrd.Enabled = True
        End If
        iSnglClr = False
        iSnglRead = True
      End If
    ElseIf d = "wait" Then
      cardStatus.Caption = "insert card"
      If iSnglClr = False Then
        Call clearControlsValue
        lblCardHolder.Caption = ""
        cmdAdd.Enabled = False
        cmdSub.Enabled = False
        cmdWriteCustCrd.Enabled = False
        cmdWriteRetailerCrd.Enabled = False
        iSnglClr = True
        iSnglRead = False
      End If
    Else
      cardStatus.Caption = d
      cmdAdd.Enabled = False
      cmdSub.Enabled = False
    End If
  End If
End Sub
0
howardsdAuthor Commented:
the fillForm function reads a smart card and fills the form with the contents of the card
0
ramyhhCommented:
add in the unload:

set form1 = nothing ' where form1 is the name of the form
0
devoted2christCommented:
Where is the form being controlled from? Is it the main form of the program, or is there another form or procedure that opens it? If the second is true, then is there any call being made to the form by the form that called it?
0
howardsdAuthor Commented:
this is the main form, but it is loaded by a splash form that flashes the user when the app is started. here is the form_load procedure for the splash form

valueSplash is the splash form (duh)
loyalty is the main form

Private Sub Form_Load()
  valueSplash.Show 0    
  Refresh  
  Sleep 2500
  valueSplash.Hide
  Unload valueSplash
  Load loyalty
End Sub
0
Mike TomlinsonMiddle School Assistant TeacherCommented:
If there is code executing in a loop or timer sub, it will prevent a form from unloading.    I have also seen cases where refreshing a control on the form will make it appear.

You could try adding a global boolean variable "unloading" and then set it to true in your form_unload sub.
Then in your timer code, check it before attempting to update your form controls.

Idle_Mind

Give this a whirl and see if it makes a difference.

' Code Follows...
Private unloading As Boolean

Private Sub Form_Load()
    unloading = False
End Sub

Private Sub Form_Unload(Cancel As Integer)

On Error GoTo err
  unloading = True ' <----- added line
  Timer1.Enabled = False

  If dbvalueconnection.state = adStateOpen Then
    dbvalueconnection.Close
  End If

  closeRecordsets rsvalueread, rsvalueidread
 
  Screen.MousePointer = vbDefault
 
  Set dbvalueconnection = Nothing
  Set rsvalueread = Nothing
  Set rsvalueidread = Nothing

  Exit Sub
 
err:
  If err <> 0 Then
    MsgBox err.Source & "-->" & err.Description, vbOKOnly, "Form unload failure"
  End If
End Sub

Private Sub Timer1_Timer()
Dim d As String

  d = String(200, 0)
  l = SCardComand(0, "Card,Info,Status", 0, nil, 0, d, 200)
  d = Left(d, InStr(d, Chr(0)) - 1)
 
  If l = 0 Then
    If d = "active" And Not unloading Then ' <--- if we are not unloading....
      cardStatus.Caption = "card in reader"
      If iSnglRead = False And Not unloading Then ' <--- if we are not unloading....
        ' if no problems during read and loyalty id the active screen make form able
        If fillForm = True And Not unloading Then ' <--- if we are not unloading....
          cmdAdd.Enabled = True
          cmdSub.Enabled = True
          cmdWriteCustCrd.Enabled = True
          cmdWriteRetailerCrd.Enabled = True
        End If
        iSnglClr = False
        iSnglRead = True
      End If
    ElseIf d = "wait" And Not unloading Then ' <--- if we are not unloading....
      cardStatus.Caption = "insert card"
      If iSnglClr = False And Not unloading Then ' <--- if we are not unloading....
        Call clearControlsValue
        lblCardHolder.Caption = ""
        cmdAdd.Enabled = False
        cmdSub.Enabled = False
        cmdWriteCustCrd.Enabled = False
        cmdWriteRetailerCrd.Enabled = False
        iSnglClr = True
        iSnglRead = False
      End If
    ElseIf  Not unloading then ' <--- if we are not unloading....
      cardStatus.Caption = d
      cmdAdd.Enabled = False
      cmdSub.Enabled = False
    End If
  End If
End Sub
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
howardsdAuthor Commented:
that seemed to have done it.  i tested 30 times without the occurence whereas before it happened at least 1 in 10

thnx!!!
0
Mike TomlinsonMiddle School Assistant TeacherCommented:
No Problem.

Glad I could help.

Idle_Mind
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.