0

我正在使用 Visual Studio 2010。我创建了一个新的 VB Windows 窗体应用程序,它使用了多个窗体。

在其中一个表单 (form2) 上,我根据用户在 form1 上选择的许多项目创建了一个 datagridview。

然后,最终用户可以在 datagridvew 上添加信息,然后转到第三种表单 (form3)。在第三个表单上,我想将与 form2 上数据网格的前三列相同的信息复制到一个新的数据网格中。

要从 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 数据时,它不会出现在智能感知中,也不会让我手动输入信息。当我尝试运行程序时,我得到:

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

我什至无法访问我在该表单上声明的公共变量。我应该提到 form2 是使用以下方法调用的:

Private 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 事件期间填充数据网格。

4

1 回答 1

0

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

正如这条消息所说:您需要一个使用 sub 创建form2的类型对象的实例,您在. 但是局部变量只能在该函数内部使用。form2NewBTN_Next_Clickfrm_PI_01

使用类的名称,form2您只能在 VB 中使用Shared成员或函数/子MSDN 共享成员

我的观点是,如果您需要将一些信息/变量从表单传输到另一个表单,那么在您的情况下(当您在创建表单时仅传输一次数据时)在表单构造函数中使用参数。

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函数中使用它...

于 2013-08-17T15:46:32.270 回答