调用 Public Sub 在某些地方有效,但在其他地方无效.VB.net 2010 [英] Calling Public Sub works in some places but not others. VB.net 2010

查看:20
本文介绍了调用 Public Sub 在某些地方有效,但在其他地方无效.VB.net 2010的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am having a problem calling a public sub from another form in my current form. The form that I am trying to call a public sub from is open when trying to make the call. I have used this method of calling public subs in this application, and they have always worked in the past. But now I am getting the following error...

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

Error 1 Reference to a non-shared member requires an object reference.

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

Here is the basic run down.... I have a main form (frmWorkOrdersMain) that is a work order system. My main form opens a sub form (frmWorkOrder) that handles individual work orders. To add parts to frmWorkOrder. frmWorkOrder opens a sub form (Form1). Form1 constructs a list of parts in an arraylist, and i want to pass this list to a public sub in frmWorkOrder. But i get the error listed above.

现在我使用 frmWorkOrderMain 中的公共子从 frmWorkOrder 刷新 frmWorkOrdersMain 中的某些 DGV.

Now I refresh certain DGVs in frmWorkOrdersMain from frmWorkOrder perfectly fine using a public sub in frmWorkOrderMain.

frmWorkOrderMain 中的公共子...

Public Sub in 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...

Call in frmWorkOrder...

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

这一直很好用.我可以从我的应用程序中的任何形式调用它.现在这是我的公共 sub 不起作用

That works fine all the time. I can call that from any form in my application. Now here is my public sub that wont work

frmWorkOrder 中的公共子...

Public Sub in frmWorkOrder...

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

这是来自 form1 的调用...

Here is the call from 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

就我所见,这就像使用第一个公共子程序一样,但我似乎无法解决我收到的错误...

Its just like using the first public sub as far as I can see, but i cant seem to resolve the error that i am receiving...

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

Error 1 Reference to a non-shared member requires an object reference.

提前感谢您提供任何帮助、指导或指导.丹

Thank you for any help, guidance, or direction in advance. Dan

推荐答案

情况与错误消息所述的情况完全一样.表单是一个类,所以你需要有一个实例来调用它的方法.

The the situation is exactly as the error message states. The form is a class so you need to have an instance to call its methods.

Public Class TestCl
     Public Sub Test
     End Sub
End Class

TestCl.Test() .. 错误

Dim tC as New TestCl

tC.Test() .. OK

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

VB6 has the concept of creating an instance of the form automatically but as far as I know it is not the case of .net.

这篇关于调用 Public Sub 在某些地方有效,但在其他地方无效.VB.net 2010的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆