AxAcroPDFLib throws exception when containing form is MDI child

I'm working on what should be a very simple project, but I'm running into a world of troubles.

I have an MDI parent form which displays a list of PDF files located on a mapped network drive. When the user double-clicks a file, an MDI child form opens to show the PDF.

The only control on the child form is of the type "Adobe Acrobat 7.0 Browser Control Type Library 1.0".

When I call the LoadFile method of the pdf viewer control, it throws this exception: First-chance exception at 0x1000847c in Foo.exe: 0xC0000005: Access violation reading location 0x00000008.

If I go into the MDI parent's code and remove the line "frmMDIChild.ParentForm = Me" and allow the pdf viewer's form to open in its own window I do not get the exception.

Doing a little googling I have found others who have the same problem but I have not found a solution anywhere.

Using a WebBrowser control to display the PDFs is not an option in this case.

Any help would be appreciated. Thanks!
vb9666Asked:
Who is Participating?
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Not sure if there is a "proper" solution to this one...  =\

Was able to display it as a "pseudo mdi child" like this:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Using ofd As New OpenFileDialog
            ofd.Filter = "PDF Files (*.pdf)|*.pdf"
            If ofd.ShowDialog = Windows.Forms.DialogResult.OK Then
                Dim f1 As New Form1
                f1.AxAcroPDF1.LoadFile(ofd.FileName)
                f1.TopLevel = False ' <-- can't work without this
                Me.Controls.Add(f1)
                f1.Show()
            End If
        End Using
    End Sub

It's not a TRUE MdiChild though...not sure how this would affect your current app!
PDF-Viewer-in-a-Pseudo-MdiChild.JPG
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
(I've never worked with AxAcroPDFLib before)

Doubt this will fix the problem...

...but if you want an Mdi Child Form then change:

    frmMDIChild.ParentForm = Me

To:

    frmMDIChild.MdiParent = Me

A possible "kludge" solution would be to open up the form normally and then make it an MDI child AFTER loading the PDF?
0
 
vb9666Author Commented:
Idle_Mind, thanks for your comment. I am sorry, I mistakenly wrote ParentForm in my question when in the code it actually sets MdiParent.

I will try your second suggestion now.......
0
 
vb9666Author Commented:
I tried Idle_Mind's suggestion of setting the MdiParent property after loading the pdf. After loading the PDF, I have the program sleep for 5 seconds so that I can visually verify that the PDF was loaded. It indeed was. When the program finished sleeping and set the child form's MdiParent, the viewer no longer displayed the document but was just a white box. No exceptions were thrown.

frmR.Show()
frmR.LoadPDF()
frmR.Refresh()
System.Threading.Thread.Sleep(5000)
frmR.MdiParent = Me
frmR.Refresh()
0
 
vb9666Author Commented:
More of a workaround than a solution, but it works for me! Thanks!!
0
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.

All Courses

From novice to tech pro — start learning today.