2013-08-16 33 views
0

我正在使用Visual Studio 2010.我創建了一個使用多種表單的新VB窗體應用程序。將數據從datagrid視圖複製到具有新的datagrid視圖的新表單VB

在這些表單之一(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數據時,它不會顯示在intellisense中,也不會讓我手動輸入信息。當我嘗試運行程序時,得到:

「錯誤1引用非共享成員需要對象引用。」

我甚至無法訪問我在該窗體上聲明的公共變量。我應該指出,窗口2將使用稱爲:

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 

和新方法使用:onload事件期間

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 

數據網格被填充。

回答

0

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

由於該消息說:你需要的form2一個實例 - 與New子,你的BTN_Next_Click內部創建創建form2類型的對象。但局部變量frm_PI_01只能在該函數內部使用。

隨着類的名稱form2你可以只用Shared成員或函數/ sub 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函數中使用它...