我正在使用Visual Studio 2010.我创建了一个使用多种表单的新VB窗体应用程序。
在其中一个表单(form2)上,我根据用户在form1上选择的项目创建了一个datagridview。
最终用户可以在datagridvew上添加信息,然后转到第三种形式(form3)。在第三个表单中,我想将与form2上的datagrid的前三列相同的信息复制到一个新的数据网格中。
要从form1上的列表框中复制项目,我使用类似于以下内容的代码:
For Each Feature As Object in form1.listbox1.SelectedItems
Me.DatagridView(Col, Row).Value = DirectCast(CustomerFeature, DataRowView)("Feature").ToString()
Row +=1
Next
我想用:
For Each row As DGVRow In form2.DatagridView.Rows
'add information to the new datagrid
Next
在我的Form3上。但是,当我尝试访问form2数据时,它不会显示在intellisense中,也不会让我手动输入信息。当我尝试运行程序时,我得到:
“错误1对非共享成员的引用需要对象引用。”
我甚至无法访问我在该表单上声明的公共变量。我应该提一下使用:
调用form2Private Sub BTN_Next_Click(sender As System.Object, e As System.EventArgs) Handles BTN_Next.Click
Dim frm_PI_01 As New form2(PIMethod, StartTime, TheUser, TheComputer)
frm_PI_01.ShowDialog()
End Sub
并且新方法使用:
Public Sub New(ByVal PIMethod As String, ByVal StartTime As Date, ByVal TheUser As String, ByVal TheComputer As String)
' This call is required by the designer.
InitializeComponent()
PI_Method = PIMethod
Start_Time = StartTime
The_User = TheUser
The_Computer = TheComputer
End Sub
在onload事件期间填充数据网格。
答案 0 :(得分:0)
"Error 1 Reference to a non-shared member requires an object reference."
正如此消息所示:您需要form2
的实例 - 使用form2
sub创建的New
类型的对象,您在BTN_Next_Click
内创建。但局部变量frm_PI_01
只能在该函数内部使用。
使用班级form2
的名称,您只能使用Shared
成员或函数/子MSDN Shared members in VB
我的意见是,如果您需要将一些信息/变量从表单传输到另一个,那么在您的情况下(当您在创建表单时只传输一次数据时)使用表单构造函数中的参数。
向您form3
构造函数添加另一个参数。例如,你的datagridview
的引用(这可能不是很好的做法引用控件到另一种形式,更好地用所需的数据创建一些变量并引用它,但仅举例来说这是最简单的方法):
'Of course create private variable for datagridview
private _dgvForm2 as dataGridView
//Constructor of form3
Public Sub New(dgvForm2 as DataGridView)
' This call is required by the designer.
InitializeComponent()
Me._dgvForm2 = dgvForm2
End Sub
在此之后,您可以在Load
功能...