0

私はグリッドを持っており、それらのグリッドはフォームのロードイベントで取り込まれます。そのイベントの最後の行で、このグリッドの SelectionChanged イベントのメソッド ハンドラーをフックしています。現在選択されている行のゼロセルの 1 値を取得したい。残念ながら、プログラムを実行すると、SelectionChanged イベント メソッド ハンドラが無限に呼び出されます...そして、その理由がわかりません。

したがって、基本的には次のようになります。

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

some code which populating data to grid...

'here hooking up method after data is there already to not fire it up during grid population
   AddHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged

End Sub

これはイベント ハンドラー メソッドそのものです。

  Private Sub gridArtikels_SelectionChanged(sender As Object, e As GridEventArgs)
        RemoveHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged

        If gridArtikels.PrimaryGrid.Rows.Count > 0 Then
            gridArtikels.PrimaryGrid.SetSelectedRows(0, 1, True)
            ItemPanelImgs.Items.Clear()
            'Dim images As New List(Of Article_Image)
            Dim selectedNummer As String = String.Empty

            selectedNummer = gridArtikels.PrimaryGrid.SelectedRows(0).Cells(1).Value.ToString()

            'images = ArtikelsAndTheirVariationsFinal.GetImagesForArticle(selectedNummer)
            'ItemPanelImgs.DataSource = images
        End If

        AddHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged
    End Sub

PS私はDotnetBar devcomponenetsからの具体的なスーパーグリッドコントロールとして使用していますが、通常のコントロールの動作とは異なるべきではありません。

ここで何が問題なのですか?

ここでデバッグしたい人のためにサンプルアプリがあります

編集:私もこの方法を試しましたが、それでも不定ループになります...

  Public IgnoreSelectionChanged As Boolean = False

 Private Sub gridArtikels_SelectionChanged(sender As Object, e As GridEventArgs) Handles gridArtikels.SelectionChanged

        If IgnoreSelectionChanged Then Exit Sub


        IgnoreSelectionChanged = True

        If gridArtikels.PrimaryGrid.Rows.Count > 0 Then
            gridArtikels.PrimaryGrid.SetSelectedRows(0, 1, True)
            ItemPanelImgs.Items.Clear()
            'Dim images As New List(Of Article_Image)
            Dim selectedNummer As String = String.Empty

            selectedNummer = gridArtikels.PrimaryGrid.SelectedRows(0).Cells(1).Value.ToString()

            'images = ArtikelsAndTheirVariationsFinal.GetImagesForArticle(selectedNummer)
            'ItemPanelImgs.DataSource = images

        End If

        IgnoreSelectionChanged = False

    End Sub
4

0 に答える 0