0

チェックボックスがクリックされたかどうかに応じて、行の色を変更しています。チェックボックスをクリックすると、その行は「クリティカル」と見なされるため、赤い色を適用するメソッドを呼び出します。


Private Sub dgvAssemblies_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAssemblies.CellContentClick, dgvExpeditions.CellContentClick, dgvMachines.CellContentClick
    Dim s As DataGridView = sender
    If s.Columns(e.ColumnIndex).Name = s.Name.Remove(0, 3) & "ColChkCritical" Then
        If s.Rows(e.RowIndex).Cells(e.ColumnIndex).Value Then
            FormatRowColor(s.Rows(e.RowIndex), "Critical")
        End If
    End If
End Sub

次のコードは、行と状態をパラメータとして受け取る「FormatRowColor」メソッドを呼び出します。その部分は正しく機能します。問題は、チェックボックスをクリックするとすぐに、行の色が変わらないことです。

何か不足していますか?

4

1 に答える 1

0

コードの一部が欠けていました。いくつかの調査の後、私はこの情報源を見つけました。

のクリックのDataGridViewCheckBoxCell場合、このイベントはチェック ボックスの値が変更される前に発生するため、現在の値に基づいて期待値を計算したくない場合は、通常、DataGridView.CellValueChanged代わりにイベントを処理します。このイベントは、ユーザーが指定した値がコミットされたときにのみ発生するため (通常、フォーカスがセルから離れたときに発生します)、DataGridView.CurrentCellDirtyStateChangedイベントも処理する必要があります。そのハンドラーで、現在のセルがチェック ボックス セルの場合は、DataGridView.CommitEditメソッドを呼び出して Commit 値を渡します。

CurrentCellDirtyStateChanged

内容の変更に関連してセルの状態が変化したときに発生します。

Private Sub dgvAssemblies_CurrentCellDirtyStateChanged(sender As Object, e As System.EventArgs) Handles dgvAssemblies.CurrentCellDirtyStateChanged, dgvExpeditions.CurrentCellDirtyStateChanged, dgvMachines.CurrentCellDirtyStateChanged
    If sender.IsCurrentCellDirty Then
        sender.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub
于 2013-05-31T19:43:07.327 に答える