We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now

x

How to dispose of a form in the load event?

bobdowdy
bobdowdy asked
on
Medium Priority
594 Views
Last Modified: 2008-03-10
I have a form that, in the load procedure, tries to find a file.  If it finds it, fine, but if it can't locate the file, I want an error displayed, and the form to never appear.

In my FormLoad procedure, I have :

if filenotfound then
      me.dispose
endif

this results in :
"cannot call dispose while doing createhandle"

Any ideas? Thanks

Comment
Watch Question

Hi there

You need to use an intermediate class checks for the existence of the file and if there then it loads your form else simly returns to the calling class.

Something along the lines of


Class Form1

... in here you get to the point to load the next form, but instead call a different class, Say clsFileExists

If clsFileExists.IsFileThere then
     ... load the form you are wanting
End If




The class clsFileExists can be simply

Class clsFileExists

Public Function IsFileThere(byval fileName as string) As Boolean

... code to check for file and return true / false

End Function

End Class


HTH  :)

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts

Commented:
You could simply close the form...  Which if you then Dispose of the form from the calling class will Dispose it...

In LOAD:

If FileNotFound Then
    Me.Close()
    Exit Sub
End If

In calling sub:

dim frmName As New frmName
frmName.ShowDialog()
frmName.Dispose()

Hope that helps...

Jake

Commented:
It is not possible to just call close inside the FormLoad event either.  You will see the same answer.    CubixSoftware's approach is a good way to handle this.    As an alternative to using a helper class you could just add a function to your form that returns whether or not your file exists.  You could then call that before calling your .ShowDialog on it and just never show the form.  


In your Form1 Class

Public Function FileExists() as boolean
  Return True/False
End Sub

From your calling sub:
Dim frmName as new frmName
If frmName.FileExists() Then
  frmName.showDialog()
Else
  frmName.dispose()
End If

Hope that helps.  I ran into this same problem about 2 months ago.  
Mike TomlinsonHigh School Computer Science, Computer Applications, Digital Design, and Mathematics Teacher
CERTIFIED EXPERT
Top Expert 2009

Commented:
Calling Me.Close() from inside the MyBase.Load() event worked for me...

Commented:
I wonder if it depends on how much is going on in the Form?? or in my situation my forms are MDI children.  I wonder if that causes problems.   I just tried the .close inside of my load and I received an error saying "Cannot call Close() while doing CreateHandle()".

It is interesting that it works in some applications and not others.
...are we done here?

Author

Commented:
Yup - were done - implemented CUBIX solution - all is fine - thanks to all we partiicpated !
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.