2016-08-16 12 views
0

Ich versuche, ein Suchfenster zu entwickeln, das es einem Benutzer ermöglicht, Kriterien einzugeben, und dann auf die Suchschaltfläche zu klicken. Wenn auf die Schaltfläche Suchen geklickt wird, werden die Ergebnisse in einer DataGridView zurückgegeben. Wenn ein Ergebnis in DataGridView geklickt wird, möchte ich die Zeilennummer an ein anderes Formular übergeben, das bereits geöffnet ist.VB.Net datagridview-Zeile von einem Formular an ein anderes Formular übergeben, das bereits geöffnet ist

Ich verstehe, ich kann das Ergebnis übergeben, indem Sie eine neue Instanz des Formulars erstellen. Ich gehe Variablen zu meinem Suchfenster mit folgenden Methode:

Private Sub SearchButton_Click(sender As Object, e As EventArgs) Handles SearchButton.Click 

     Dim ST = New Search_Tool(DGV_Ongoing.DataSource, AgencyOptions, EthnicityOptions, EmploymentTypeOptions, EmploymentStatusOptions, 
             CategoryOptions, OutcomeOptions) 

     ST.Show() 

    End Sub 

aber ich nicht die Form nennen kann ich den Zeilenwert übergeben will, weil es bereits geöffnet ist (es ist die Hauptform). Gibt es einen Weg, damit umzugehen? Ich habe Mühe, irgendwelche Informationen zu finden, die nicht das Formular aufrufen, um es zu öffnen, während die Daten weitergegeben werden.

Ich kann Main_form.Main_DGV.CurrentCell nicht verweisen, da Visual Studio angibt, dass es eine Objektreferenz erfordert, um dies zu tun.

Vielen Dank im Voraus!

+0

Sie könnten eine Eigenschaft auf dem Suchformular verfügbar machen, um die Antwort abzurufen. Ihr ST-Objekt muss möglicherweise nicht lokal sein. Anstatt ein visuelles Objekt zurückzugeben, sollten Sie auch etwas wie eine ID oder ein Array von IDs zurückgeben. – Plutonix

+0

Werfen Sie einen Blick auf [diesen Beitrag] (http://Stackoverflow.com/a/38769212/3110834) für einige gute Optionen. –

+0

Aus Sicht des Benutzers: Wäre es nicht einfacher, am selben Ort zu suchen, an dem die Daten angezeigt werden? Also Filter direkt über dem Gitter setzen zu können? –

Antwort

1

Ich würde ein Ereignis in Ihrem Search_Tool-Formular empfehlen, das ausgelöst wird, wenn der Benutzer gefunden hat, was er sucht.

Die Hauptform ist abonniert und kann dann auf ihr Datagrid zugreifen.

Class Search_Tool 
    Inherits Form 

    Public Event SearchResultFound(resultId As Integer) 

    Private Sub OnUserClickedARowOrPressedAButtonOrWhatever() 
     RaiseEvent SearchResultFound(currentRow.Id) 
    End Sub 

End Class 

Und in der Hauptform.

Der Vorteil davon ist, dass das SearchForm nicht wissen muss, wofür es verwendet wird. Es dient nur dazu, Ergebnisse zu liefern, die später die Wiederverwendung erleichtern.

+1

Anstelle von 'AddHandler' hätte man' WithEvents' verwenden können, dann muss man sich keine Gedanken über das Hinzufügen und/oder Entfernen von Handlern machen ***, das ist was Sie sind da für. Nur ein Vorschlag als dann wird es die Handles-Klausel für Sie erstellen und wird reagieren, wenn das Ereignis eintritt. – Codexer

+0

Ich werde es versuchen, wenn ich später zu meinem Projekt zurückkehre. Aber es macht Sinn, ich bin sicher, es wird funktionieren! – SilverShotBee

Verwandte Themen