调用Public Sub在某些地方工作但在其他地方不工作。 VB.net 2010

时间:2013-07-30 14:30:45

标签: vb.net vb.net-2010

我在使用当前表单中的其他表单调用公共子时遇到问题。 当我尝试拨打电话时,我试图呼叫公共子的表单是打开的。 我在这个应用程序中使用了这种调用public subs的方法,并且它们一直在使用它们。但现在我收到以下错误......

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

这是基本的运行.... 我有一个主要表单(frmWorkOrdersMain),它是一个工单系统。 我的主窗体打开一个子窗体(frmWorkOrder)来处理各个工单。 要向frmWorkOrder添加部件。 frmWorkOrder打开一个子表单(Form1)。 Form1构造了一个arraylist中的部分列表,我想将此列表传递给frmWorkOrder中的public sub。但是我得到了上面列出的错误。

现在我使用frmWorkOrderMain中的public sub完全从frmWorkOrder刷新frmWorkOrdersMain中的某些DGV。

frmWorkOrderMain中的Public Sub ...

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 ...

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对非共享成员的引用需要对象引用。

感谢您提前提供任何帮助,指导或指导。 丹

1 个答案:

答案 0 :(得分:4)

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

Public Class TestCl
     Public Sub Test
     End Sub
End Class

TestCl.Test() ..错误

Dim tC as New TestCl

tC.Test() ..确定

VB6具有自动创建表单实例的概念,但据我所知,它不是.net的情况。