调用 Public Sub 在某些地方有效,但在其他地方无效.VB.net 2010 [英] Calling Public Sub works in some places but not others. 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屋!