0

我是这个论坛的新手。这是我的第一篇文章,尽管我在这里花了很多时间寻找答案。Form1上的代码参考Form2.DataGridView

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

Form1有一个MenuStrip,我正在尝试编写代码,当选择这些菜单项之一时,从CSV填充DGV。在这个阶段,我只是试图读取数据,然后我将编写代码来分割字符串。

Screenshot

我有选择的文件没有问题导入和StreamReader的出现读取该文件,但没有数据会向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 

回答

1

看起来你正在失去你的实例为您展示,由于它的定义窗体的Load作为FormXYZ。将该变量的范围扩展到类级别。

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