选中复选框时如何通知

问题描述 投票:0回答:2

通过自定义功能执行检查时,无法识别更改复选框。

我们有可以点击复选框的表单。在这种情况下,记录将被添加到列表中,该列表将使用保存功能进行更新。并且提到了检查所有复选框的功能,但这不像我点击单个复选框时的行为。

代码“全选”

Private Sub Befehl83_Click()
    With Me.RecordsetClone
        .MoveFirst
        Do Until .EOF
            .Edit
            !visited = True
            .update
            .MoveNext
        Loop
    End With
End Sub

点击复选框

Private Sub chkVisited_Click()
    If Not visitedList.Contains(Me.Form.Recordset.Fields("trainingMeasureID").Value) Then
        visitedList.Add Me.Form.Recordset.Fields("trainingMeasureID").Value
    Else
        visitedList.Remove Me.Form.Recordset.Fields("trainingMeasureID").Value
    End If

End Sub

当前使用全选功能时,不会保存复选框的状态。仅在单独选中复选框时。

它应该在两种情况下都能正确保存。

vba ms-access checkbox access-vba
2个回答
0
投票

这是一个不太理想的解决方案:

Private Sub Befehl83_Click()
    With Me.Recordset
        .MoveFirst
        Do Until .EOF
            .Edit
            .Fields("visited") = True
            .Update
            Call chkVisited_Click()
            .MoveNext
        Loop
    End With
End Sub

这将主动更新记录集,您实际上会看到在表单中移动的活动记录。

另一种解决方案是重建代码,并根据表单的记录集直接对基础数据源进行更新。然后相应地更新您的列表。

根据文档,RecordsetClone是表单记录集的只读副本。 https://docs.microsoft.com/en-us/office/vba/api/access.form.recordsetclone


0
投票

使用AfterUpdate事件:

Private Sub Befehl83_Click()

    With Me.RecordsetClone
        .MoveFirst
        Do Until .EOF
            If !visited.Value = False Then
                .Edit
                !visited.Value = True
                .update
            End If
            .MoveNext
        Loop
    End With

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.