从 Form1 的代码中引用 Form2.DataGridView

Reference Form2.DataGridView from code on Form1

我是这个论坛的新手。这是我的第一个 post,尽管我在这里花了很多时间寻找答案。

我在 Excel 中使用 VBA 多年,但最近开始在 Visual Studio 2015 年使用 VB。我将 Form 1 创建为 MDIContainer并在其中打开另一个表格。此表单 (FormXYZ) 包含一个 DataGridView。

Form1 has a MenuStrip and a I am currently trying to write the code, when one of these menu items is selected, to populate the DGV from a CSV.在这个阶段,我只是尝试读取数据,然后我将处理代码以拆分字符串。

Screenshot

我在选择要导入的文件时没有遇到任何问题,流阅读器似乎在读取文件,但没有数据进入 DGV。

当我尝试将按钮单击事件的代码放在 FormXYZ 上时,填充了 DGV。所以我认为错误是由于我引用 DGV 的方式造成的,因为 MenuStrip_Click 事件的代码在 Form1 上,但 DGV 在 FormXYZ 上。

如果有人能指出我哪里出错了,我将不胜感激。我的代码如下所示。

感谢 Tepede

Imports System.IO

Public Class Form1 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim FormXYZ As New FormXYZ()
    FormXYZ.MdiParent = Me 'Set the Parent Form of the Child window.  
    FormXYZ.Show() 'Display the XYZ form.  
End Sub
'-------------------------------------
'StripMenu click command to import CSV
Public Sub TSMIFileImportCSV_Click(sender As Object, e As EventArgs) Handles TSMIFileImportCSV.Click

    Dim Filename As String
    Dim RowValue As String

    Dim OpenFile As OpenFileDialog = New OpenFileDialog()

'Open file dialog
    With OpenFile
        .Filter = "CSV (*.CSV)|*.csv"
        .FilterIndex = 1
        .InitialDirectory = "C:\"
        .Title = "Open File"
        .CheckFileExists = False
    End With

    If OpenFile.ShowDialog() = DialogResult.OK Then
        Filename = OpenFile.FileName
    End If
    '---------

    ' Read CSV file content
    Dim objReader As StreamReader = New StreamReader(Filename)
    While objReader.Peek() <> -1
        RowValue = objReader.ReadLine()
 'Fist column is Boolean, the second should have the data from the CSV file
        FormXYZ.DataGridView1.Rows.Add(True, RowValue, "Test", "Test")
    End While
    objReader.Close()

End Sub

您显示的 FormXYZ 的实例似乎丢失了,因为它的定义在表单加载中。将该变量的范围扩展到 class 级别。

Public Class Form1 

Private FormXYZ As FormXYZ

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    FormXYZ = New FormXYZ()
    FormXYZ.MdiParent = Me 'Set the Parent Form of the Child window.  
    FormXYZ.Show() 'Display the XYZ form.  
End Sub