0

我有网格,这些网格填充在 Form 的加载事件中。在该事件的最后一行,我正在为此网格的 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