0

Je suis nouveau sur ce forum. C'est mon premier article, même si j'ai passé beaucoup de temps ici à chercher des réponses.Référence Form2.DataGridView à partir du code sur Form1

J'ai utilisé VBA dans Excel pendant de nombreuses années, mais j'ai récemment commencé à utiliser VB dans Visual Studio 2015. J'ai créé Form 1 en tant que MDIContainer et j'ai ouvert un autre formulaire à l'intérieur. Ce formulaire (FormXYZ) contient un DataGridView.

Form1 a un MenuStrip et j'essaye actuellement d'écrire le code, quand un de ces éléments de menu est sélectionné, pour peupler la DGV d'un CSV. À ce stade, j'essaie seulement de lire les données et ensuite je vais travailler sur le code pour séparer les chaînes.

Screenshot

je n'ai aucun problème avec la sélection d'un fichier à importer et StreamReader semble lire le fichier, mais aucune donnée ne fait à la DGV.

Lorsque j'ai essayé de mettre le code sur FormXYZ pour un événement de clic de bouton, le DGV a été rempli. Donc, je crois que l'erreur est due à la façon dont je fais référence à la DGV, car le code de l'événement MenuStrip_Click est sur Form1, mais la DGV est sur FormXYZ.

J'apprécierais que quelqu'un puisse indiquer où je me trompe. Mon code est montré ci-dessous.

Merci 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 

Répondre

1

Il semble que vous perdez votre instance à l'FormXYZ que vous avez eu raison de sa définition étant dans la charge de formulaire. Développez la portée de cette variable pour qu'elle soit au niveau de la classe.

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