2

我在当前表单中从另一个表单调用公共子时遇到问题。在尝试拨打电话时,我试图从中调用公共子的表单处于打开状态。我在这个应用程序中使用了这种调用公共潜艇的方法,并且它们过去一直有效。但是现在我收到以下错误...

错误 1 ​​对非共享成员的引用需要对象引用。

这是基本的运行情况......我有一个主表单(frmWorkOrdersMain),它是一个工单系统。我的主窗体打开一个处理单个工单的子窗体 (frmWorkOrder)。将零件添加到 frmWorkOrder。frmWorkOrder 打开一个子表单 (Form1)。Form1 在 arraylist 中构造一个零件列表,我想将此列表传递给 frmWorkOrder 中的公共子。但我收到上面列出的错误。

现在,我使用 frmWorkOrderMain 中的公共子程序从 frmWorkOrder 刷新 frmWorkOrdersMain 中的某些 DGV 非常好。

frmWorkOrderMain 中的公共子...

Public Sub ReloadWorkOrdersAndJobs()
    Dim DS1 As New DataSet
    Dim DS2 As New DataSet
    Dim DB As New DBWrapper

    DS1 = DB.GetCustWO(CInt(cboWOCust.SelectedValue))
    DS2 = DB.GetCustJobs(CInt(cboWOCust.SelectedValue))

    dgvWO2.DataSource = DS1.Tables("WorkOrders")
    dgvJobs2.DataSource = DS2.Tables("Jobs")
    dgvWO2.Columns(0).Width = 90
    dgvWO2.Columns(1).Width = 493
    dgvWO2.Columns(2).Width = 85
    dgvWO2.Columns(3).Width = 85
    dgvJobs2.Columns(0).Width = 80
    dgvJobs2.Columns(1).Width = 353
    dgvJobs2.Columns(2).Width = 80
    dgvJobs2.Columns(3).Width = 80
    dgvJobs2.Columns(4).Width = 80
    dgvJobs2.Columns(5).Width = 80

    WOMainView()
End Sub

调用 frmWorkOrder...

Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles tsbSaveWO.Click
   (...code...)
   frmDMSWorkOrders.ReloadWorkOrdersAndJobs()
End Sub

这一直都很好。我可以从我的应用程序中的任何形式调用它。现在这是我无法使用的公共子

frmWorkOrder 中的公共子...

Public Sub AddParts(ByVal PartList As ArrayList)
    Dim P As New ArrayList
    P = PartList
    (...CODE....)
End Sub

这是来自form1的电话...

Private Sub btnSaveParts_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveParts.Click
    Dim I As Integer
    Dim PartList As New ArrayList
    Dim P As Part

    For I = 0 To dgvPartsToBeAdded.RowCount - 1
        P = New Part
        P.ID = CInt(dgvPartsToBeAdded.Rows(I).Cells(0).Value)
        P.Brand = CStr(dgvPartsToBeAdded.Rows(I).Cells(1).Value)
        P.ModelNum = CStr(dgvPartsToBeAdded.Rows(I).Cells(2).Value)
        P.PClass = CInt(dgvPartsToBeAdded.Rows(I).Cells(7).Value)
        P.UPC = CStr(dgvPartsToBeAdded.Rows(I).Cells(4).Value)
        P.Description = CStr(dgvPartsToBeAdded.Rows(I).Cells(3).Value)
        P.Serial = CStr(dgvPartsToBeAdded.Rows(I).Cells(5).Value)
        P.Notes = CStr(dgvPartsToBeAdded.Rows(I).Cells(8).Value)
        P.ServiceTag = CStr(dgvPartsToBeAdded.Rows(I).Cells(6).Value)

        PartList.Add(P)
    Next

    frmWorkOrder.AddParts(PartList)

End Sub

据我所知,它就像使用第一个公共子一样,但我似乎无法解决我收到的错误......

错误 1 ​​对非共享成员的引用需要对象引用。

感谢您提前提供任何帮助、指导或指导。担

4

1 回答 1

4

情况与错误消息所述完全相同。表单是一个类,因此您需要有一个实例来调用其方法。

Public Class TestCl
     Public Sub Test
     End Sub
End Class

TestCl.Test().. 错误

Dim tC as New TestCl

tC.Test() .. 好的

VB6 具有自动创建表单实例的概念,但据我所知,.net 并非如此。

于 2013-07-30T16:59:41.120 回答