2017-09-21 2 views
1

Ich habe ein Formular mit ein paar Datagridviews, die mit Daten aus verschiedenen Datenbanken gefüllt sind (Screenshot 1) Wenn ich mit der rechten Maustaste auf ein neues Formular erscheint, was ich will um mit allen Daten aus der ausgewählten Zeile zu füllen (Abbildung 2) enter image description here In meinem Code habe ich die Nummer 1376 fest codiert, um zu sehen, ob sie funktioniert. Wenn ich die Nummer 1376 durch ValuePass ersetze, wird es nicht funktionieren. Also muss ich irgendwie diesen Wert weitergeben. Es hat dasselbe für ein Stück Schnur getan, das funktioniert, aber es scheint nicht für den Wert zu arbeiten.Füllen Sie Formular mit einem übergebenen Wert aus einem anderen Formular mit Visual Studio

So ist es das, was ich in meinem ersten Formular so weit gekommen

Public Class Relatie_beheer 
Public SQL As New SQLControl 
Dim value As Object 

Private Sub dvgRelaties_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _ 
    Handles dgvRelaties.CellClick 
    If (e.RowIndex = -1 Or e.ColumnIndex = -1) Then Return 

    ' No matter which cell is clicked, put the data from the field in the relatie_nr column in the variable value 
    Dim x As Integer 
    x = e.ColumnIndex + (3 - e.ColumnIndex) 
    value = dgvRelaties.Rows(e.RowIndex).Cells(x).Value 
End Sub 

Private Sub WijzigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WijzigenToolStripMenuItem.Click 
    Dim Obj As New RelatieNieuw With { 
     .StringPass = "Wijzigen" 
    } 
    Dim ValObj As New RelatieNieuw With { 
     .ValuePass = value 
    } 
    Obj.ShowDialog() 
End Sub 

Und in meinem zweiten Form

Public Class RelatieNieuw 
Public SQL As New SQLControl 
Public Property StringPass As String 
Public Property ValuePass As String 

Private Sub RelatieNieuw_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Label2.Text = StringPass + " Relatie" 
    Select Case StringPass 
     Case "Toevoegen" 
      ' Open new window and create a new private key number 
     Case "Wijzigen" 
      ' Open new window and retrieve relatie fields to change 
      SQL.AddParam("@item", 1376) 
      SQL.ExecQuery("SELECT * FROM relatie WHERE Relatie_nr = @item;") 
      txtzoeknaam.Text = SQL.DBDT.Rows(0)(1).ToString 

     Case "Verwijder" 
      ' Open new window and retrieve relatie fields to delete 
     Case Else 
      MsgBox("Option not defined " + StringPass) 
    End Select 
End Sub 

Antwort

0

habe ich es mir auf folgende Weise:

Dim value As Object 

    Private Sub WijzigenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles WijzigenToolStripMenuItem.Click 
     Dim Obj As New RelatieNieuw("Wijzigen", value) 
     Obj.ShowDialog() 
    End Sub 

Und meine zweite Form sieht nun folgendermaßen aus:

In der ersten Form ich den Code auf diese geändert

Public Class RelatieNieuw 
Public SQL As New SQLControl 
Public Property StringPass As String 
Dim ValuePass As String 

Public Sub New(ByVal pstr As String, ByVal value As String) 
    ' This call Is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 
    StringPass = pstr 
    ValuePass = value 
End Sub 

und anstelle der 1376 habe ich ValuePass

Scheint jetzt zu arbeiten.

+0

Ja, das ist im Grunde das gleiche wie die erwähnte Lösung. Ich habe ein Komma im obigen Code vergessen. Ich habe den ursprünglichen Post bearbeitet. – Veeke

1

Sie sind 2 verschiedene RelatieNieuw-Objekte erstellen, während das sollte ein Objekt sein, mit 2 params:

Dim Obj As New RelatieNieuw With { 
    .StringPass = "Wijzigen", 
    .ValuePass = value 
} 

‚ja: Passwort comma

+0

Wenn ich das mache, bekomme ich einen Fehler. Es erwartet ein} nach "Wijzigen" –

Verwandte Themen