vb.net / события? - PullRequest
       2

vb.net / события?

0 голосов
/ 04 марта 2011

У меня есть DataGridView, и иногда я использую событие CellValueChanged, но в других случаях я не хочу, чтобы оно срабатывало. Есть ли способ, которым я могу удалить событие sub, а затем восстановить его.

У меня есть 5 столбцов с ComboBox. После лизания одного, а затем другого, линия ниже продолжает повторяться, пока стек не рухнет

 Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) _
                Handles DataGridView1.EditingControlShowing
        Try
            Debug.Print("entered the EditingControlShowing")
            Dim ColName As String = Me.DataGridView1.Columns(Me.DataGridView1.CurrentCell.ColumnIndex).Name
            If ColName = "Col1" Or ColName = "Col2" Or ColName = "Col3" Or ColName = "Col4" Or ColName = "Col5" Then

                'the column you want to cast
                Dim cmb As ComboBox = TryCast(e.Control, ComboBox)
                RemoveHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
                AddHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    Sub cmb_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
        Try
            Debug.Print("about to update cell") <<===== this line just repeats until stack crashes
            Me.DataGridView1.Rows(Me.DataGridView1.CurrentRow.Index).Cells(Me.DataGridView1.CurrentCell.ColumnIndex).Value = CType(sender, ComboBox).SelectedItem
            UpdateAvgColumn(Me.DataGridView1.CurrentRow.Index)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
    Sub UpdateAvgColumn(ByVal r As Integer)
        Dim avg As Single = 0.0
        Debug.Print("UpdateAvgColumn")
        If CInt(Me.DataGridView1.Rows(r).Cells("Col1").Value) <> 0 And CInt(Me.DataGridView1.Rows(r).Cells("Col2").Value) <> 0 And _
            CInt(Me.DataGridView1.Rows(r).Cells("Col3").Value) <> 0 And CInt(Me.DataGridView1.Rows(r).Cells("Col4").Value) <> 0 And _
            CInt(Me.DataGridView1.Rows(r).Cells("Col5").Value) <> 0 Then
            avg = CSng((CInt(Me.DataGridView1.Rows(r).Cells("Col1").Value) + CInt(Me.DataGridView1.Rows(r).Cells("Col2").Value) + _
                        CInt(Me.DataGridView1.Rows(r).Cells("Col3").Value) + CInt(Me.DataGridView1.Rows(r).Cells("Col4").Value) + _
                            CInt(Me.DataGridView1.Rows(r).Cells("Col5").Value)) / 5)
        End If
        Me.DataGridView1.Rows(r).Cells("AvgCol").Value = avg
    End Sub

1 Ответ

1 голос
/ 04 марта 2011

Да, вы можете удалить обработчики событий, используя метод RemoveHandler.Но лучшим подходом будет проверка условия в событии и выполнение процесса или игнорирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...