2016-08-16 29 views
0

私は、ユーザーが条件を満たすことを可能にする検索ウィンドウを開発しようとしています。検索ボタンがクリックされると、結果はDataGridViewに返されます。 DataGridViewの結果がクリックされると、すでに開いている別のフォームに行番号を渡したいと思います。VB.Netあるフォームから既に開いている別のフォームにデータグリッドビューの行を渡します。

フォームの新しいインスタンスを作成して結果を渡すことができます。私はそれが(そのメインフォーム)既に開いているために、行の値を渡したいフォームを呼び出すことはできません。しかし

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 

:私は、次のメソッドを使用して、私の検索ウィンドウに変数を渡します。これを処理する方法はありますか?私はデータを渡している間にそれを開くためのフォームを呼び出さない情報を見つけるのに苦労しています。

Visual Studioでは、これを行うためにオブジェクト参照が必要とされているので、Main_form.Main_DGV.CurrentCellは参照できません。

ありがとうございます!

+0

検索フォームにプロパティを公開して、回答を取得することができます。あなたの 'ST'オブジェクトはローカル以外である必要があります。また、ビジュアルオブジェクトを返すのではなく、IDやIDの配列のようなものを返すことを検討してください。 – Plutonix

+0

いくつかの良いオプションについては、[this post](http://stackoverflow.com/a/38769212/3110834)をご覧ください。 –

+0

ユーザーの観点から:データが表示されている場所と同じ場所で検索するのがスムーズではありませんか?だから、グリッドの上に直接フィルターを設定できるようにするには? –

答えて

1

あなたが探しているものが見つかった場合に発生するSearch_Toolフォームのイベントをお勧めします。

メインフォームはサブスクライブされてお​​り、そのデータグリッドにアクセスできます。

Class Search_Tool 
    Inherits Form 

    Public Event SearchResultFound(resultId As Integer) 

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

End Class 

メインフォームにあります。

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) 
    AddHandler ST.SearchResultFound, Sub(result As Integer) 
             'handle your result id here. 
             MessageBox.Show("User selected row " & result) 
            End Sub 
    ST.Show() 

End Sub 

これの利点は、SearchFormがその使用されているものを知る必要がないことです。後で再利用するのが簡単になる結果が得られるだけである。

+1

'AddHandler'の代わりに' WithEvents'を使用できましたが、ハンドラを追加することや***を削除する心配はありません。彼らはそこにいる。次のような提案は、あなたのためにハンドル節を作成し、イベントが発生したときに応答します。 – Codexer

+0

私は後で自分のプロジェクトに戻るときにこれを行かせます。しかしそれは意味があるので、私はそれが動作すると確信しています! – SilverShotBee

関連する問題