Another problem! (Damn VB6 was much easier)

Reapz

Well-known member
Joined
Dec 15, 2002
Messages
74
A button on my Form1 opens Form2. Simple as that.
In VB6 I was using....

[VB]
Form2.Show(1)
[/VB]

to show the form modally and the cancel button on Form2 would have the code...

[VB]
Unload Me
[/VB]

This doing the same thing as clicking on the close icon.

Form2 would appear, its Load event having been executed and then it would close when the appropriate button was clicked. If I wanted to open it again then it would do so exactly the same.

Now in VB.NET I cant use Form2.Show(1) apparently I have to use...

[VB]
Form2.ShowDialog()
[/VB]

...if I want the form to open modally. So here we get to the first problem. If I use ShowDialog instead of Show then the Load event of the form doesnt execute. So I use Form2.Show() and put up with the fact the form isnt modal.

The second problem is that Unload Me no longer exists and according to another thread here the equivalent is...

[VB]
Me.Close()
[/VB]

This however causes problems when I click the button to execute the code Form2.Show() code again. It gives me the error Cannot access a disposed object named "Form2". I can make the Cancel button Me.Hide() instead but if the user clicks the close icon then this error is gonna occur.

Oh my god my heads about to explode.

All Im after is for Form2 to open modally AND execute its Load event AND NOT get that damned error when I try an open it again later. (Something I could do in VB6 in 2 lines containing 4 words, 1 integer, 1 pair of brackets and a full stop!)

And if at all possible could someone tell me why Microsoft would take something as easy to use as VB6 and turn it into the complete and utter pig that is VB.NET?

Grrrr.... :mad:
 
Try this:
Code:
In Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim frm As New Form2()
        frm.ShowDialog()
    End Sub

In Form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MessageBox.Show("Wheeeeee!!! I am Form2_Loads code!")
    End Sub
 
Ok the bit in Form1 is the same as that already and I commented out everything else in my Form2_Load and added your line.

The Load event still didnt execute with ShowDialog! :(



I forgot to mention the disposed error doesnt occur with ShowDialog.
 
Last edited by a moderator:
Why use the Load event at all? Why not put initialization code in the forms constructor after the InitializeComponent call?
 
Well, initialization code would fire on the Dim frm As New Form2() line,
instead of on the showing of the form. In this case, that wouldnt
really matter because they are right beside each other, but in some
cases, it could throw some things off.

But to try it, expand the Windows forms designer generated code
region, and look for the constructor:
Code:
Public Sub New()
        MyBase.New()

        This call is required by the Windows Form Designer.
        InitializeComponent()

        Add any initialization after the InitializeComponent() call

    End Sub
And then try adding your Form2_Load coad underneath of
that second comment.
 
Last edited by a moderator:
Code:
Public Sub New()
    MyBase.New()

    This call is required by the Windows Form Designer.
    InitializeComponent()

    Add your code here <-<-<-<-

End Sub
 
Last edited by a moderator:
Cheers guys! I found that and it now works perfectly. I get to use ShowDialog so the form is modal and I dont get that annoying error. Cool! :)
 
Just remember that the constuctor and Load event are not the same.
Load fires before the form is shown for the first time, and the constructor
is fired when the form is initialized (Dim frm As New Form2).
 
And there should be NO reason why the _Load event doesnt fire when showing a form modally. It works perfectly fine for me...

-ner
 
Back
Top