VB.NET - 辅助表单加载

时间:2015-10-01 17:28:07

标签: vb.net winforms nullreferenceexception

背景

我有一个Winform applicationVB.NET框架4.0)。在应用程序中有两种形式:frmHome(启动表单)和frmdePDF(具有Adobe PDF Reader COM控件的辅助表单)。 frmHome从DFS获取PDF路径,检查路径是否确实存在,如果是,则将文件加载到我的PDF控件中并显示frmdePDF。现在,这在我的本地机器上100%有效。但是,任何其他计算机上的初始加载都会引发NullReferenceException。调用SAME代码的其他事件(例如我的datagridview CellContentClick)在所有计算机上都能正常运行。我理解(我希望是正确的)问题是第一次初始化frmdePDF。

代码

加载datagridview(dgDE)并拉取PDF路径的代码:

Private Sub btnDELegalLOMCState_Click(sender As Object, e As EventArgs) Handles btnDELegalLOMCState.Click
    loadStatus = "State"
    Dim deState As String = Nothing

    ''Validate and set state
    If Me.cbDEState.SelectedIndex = 0 Then
        MessageBox.Show("Please select a state.")
        Exit Sub
    Else
        deState = Me.cbDEState.Text
    End If

    ''Populate dgDE/set data bindings
    Try
        Me.cbDERegion.ComboBox.SelectedIndex = -1
        Me.dgDE.DataSource = Nothing

        Me.SpSelectLOMAbyStateTableAdapter.Fill(Me.DevGISDataSet.spSelectLOMAbyState, 4, deState)
        Me.dgDE.DataSource = Me.SpSelectLOMAbyStateBindingSource
        Me.bnDE.BindingSource = Me.SpSelectLOMAbyStateBindingSource

        Me.txtDEIssueDte.DataBindings.Clear()
        Me.txtDECaseNum.DataBindings.Clear()
        Me.txtDECommNum.DataBindings.Clear()

        Me.txtDEIssueDte.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.SpSelectLOMAbyStateBindingSource, "IssueDte", True))
        Me.txtDECaseNum.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.SpSelectLOMAbyStateBindingSource, "CaseNum", True))
        Me.txtDECommNum.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.SpSelectLOMAbyStateBindingSource, "CommNum", True))

    Catch ex As Exception
        MessageBox.Show("Error loading LOMAs: " & ex.Message.ToString)
    End Try

    ''Load PDF
    If Me.dgDE.RowCount <> 0 Then
        Dim i As Integer = Me.dgDE.CurrentRow.Index
        Dim pathdePDF As String = Me.dgDE.Rows.Item(i).Cells(5).Value.ToString
        LoaddePDF(pathdePDF)
    End If
End Sub

Public Sub包含加载文件的代码并显示frmdePDF:

Public Sub LoaddePDT(ByVal pathdePDF As String)
    If System.IO.File.Exists(pathdePDF) Then
        frmdePDF.pdfLOMC.LoadFile(pathdePDF)
        frmdePDF.Show()
    Else
        MessageBox.Show("Image not available. Please check FEMA and CAMSIS.")
        frmdePDF.Hide()
    End If
End Sub

我尝试过的其他事情

每次创建表单的新实例:

Public Sub LoadPDF_test(ByVal pathdePDF As String)
    Dim openForms = Application.OpenForms.OfType(Of frmdePDF)()
    While openForms.Any
        openForms.First.Close()
    End While

    If System.IO.File.Exists(pathdePDF) Then
        Dim newfrmdePDF As New frmdePDF
        newfrmdePDF.pdfLOMC.LoadFile(pathdePDF)
        newfrmdePDF.Show()
    Else
        MessageBox.Show("Image not available. Please check FEMA and CAMSIS.")
    End If
End Sub

此代码100%在我的机器上运行。它的行为与任何其他计算机上的第一个加载代码相同(抛出NullReferenceException)。

例外文字

See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an     object.
   at SaveLOMC.frmHome.LoadPDF_test(String testPath) in    C:\Data\Alycia\Development\LOMC\Projects\TFS_test\SaveLOMC\SaveLOMC\frmHome.vb:l    ine 46
   at SaveLOMC.frmHome.btnDENewLOMCState_Click(Object sender, EventArgs e)   in   C:\Data\Alycia\Development\LOMC\Projects\TFS_test\SaveLOMC\SaveLOMC\frmHome.vb:l ine 440
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

我尝试在我的本地计算机上单步执行调试器。但同样,我无法在其上重新创建错误,因此所有对象都已赋值。

我知道这个问题已被无休止地询问。我已经阅读了所有这些(加上更多!):

What is a NullReferenceException, and how do I fix it?

"Object reference not set to an instance of an object?"

Object reference not set to an instance of an object. vb.net looking up a string

visual basic: object reference not set to an instance of an object

Visual Basic - Object reference not set to an instance of an object

VB.Net How to set an object reference to an instance of an object?

object reference not set to an instance of an object. vb.net for some but not all code

Object reference not set to an instance of an object.

specific error on :"Object reference not set to an instance of an object."

Object reference not set to an instance of an object

"Object reference not set to an instance of an object" message

object reference not set to an instance of an object error showing

附加信息:我的本地机器是64位,其他机器是32位。 Adobe组件的关联.dll文件是32位。应用程序属性中的我的目标CPU是x86。

任何建议都表示赞赏,如果我没有用尽我的选择,我不会问这个广泛的问题。

解决方案

表单加载事件没有任何问题 - 我试图在加载时手动设置表单的位置/边界。将界限设置为不存在的屏幕(我的计算机有三个屏幕 - 其他人都有2个)。学习经历?

0 个答案:

没有答案