我正在通过MS Access 2010开发数据库应用程序。
我为报告添加了一个未绑定的二进制复选框,目的是用户可以选择两个记录源(查询)中的一个,用于报告的两种变体形式。
复选框Control Source
属性为空,Triple State
设置为No
。
但是,在打开报告后,
复选框永久变灰,无论多少次被点击!
此外,在每个单点击复选框时,my_checkbox_Click()
会触发两次,其值在Null
和True
之间切换!
Null值似乎被解释为False
,如果事件没有在每次单击时双击,则可能没问题。
如何正确显示 的复选框 - 作为二进制复选框,在是和否之间切换 - 和功能正确地说,每次点击只会一次 {<1}}? 如果这是一个没有解决方案的已知问题,这是一种解决方法的最佳按钮类型?
我的代码:
_Click()
立即窗口:
Private Sub Report_Load()
Debug.Print vbCrLf & "Report_Load"
Me.my_chk.Value = False
set_data_source
End Sub
Private Sub my_chk_Click()
Debug.Print vbCrLf & "my_chk_Click"
set_data_source
End Sub
Private Sub set_data_source()
Debug.Print vbCrLf & "set_data_source"
Debug.Print "Me.my_chk.Value", Me.my_chk.Value
Debug.Print "Me.my_chk.ControlSource ", Me.my_chk.ControlSource
Debug.Print "Me.my_chk.TripleState ", Me.my_chk.TripleState
Me.RecordSource = IIf(Me.my_chk.Value, "my_yes_qry", "my_no_qry")
Me.Requery
Debug.Print "Me.RecordSource", Me.RecordSource
End Sub
唯一的好消息是,Report_Load
set_data_source
Me.my_chk.Value False
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
' click once on checkbox
my_chk_Click
set_data_source
Me.my_chk.Value Null
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
my_chk_Click
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
' click once on checkbox
my_chk_Click
set_data_source
Me.my_chk.Value Null
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
my_chk_Click
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
更改之后的Requery
确实正确(如果非常简短)会影响数据。
另一件事,即使我的复选框在RecordSource
下没有列出AfterUpdate
,如果我用
Events
处理程序
my_checkbox_Click()
我得到了
Private Sub my_chk_AfterUpdate()
Debug.Print vbCrLf & "my_chk_AfterUpdate"
set_data_source
End Sub
正如您所看到的那样,因为现在,即使Report_Load
set_data_source
Me.my_chk.Value False
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_no_qry
' click once on checkbox
my_chk_AfterUpdate
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
' click once on checkbox
my_chk_AfterUpdate
set_data_source
Me.my_chk.Value -1
Me.my_chk.ControlSource
Me.my_chk.TripleState False
Me.RecordSource my_yes_qry
每次点击触发一次,但复选框值也不会改变!
在access-programmers.co.uk/forums结束 有一个建议(关于表格,而不是报告)使用花式编码
AfterUpdate
我试过,但结果没有差异。
答案 0 :(得分:1)
您确定可以在表单中检查报告上的复选框吗?我不是!但是可以找到一个有趣的可能性here。
对于表单,它会变灰,因为它未绑定且值未设置。解决方案是创建一个表单变量并设置为该变量。加载表单时,将变量设置为False并将复选框设置为变量。在复选框的AfterUpdate()
事件中,使用控件的值来设置变量。然后运行set_data_source
。您可能还希望在加载表单时运行set_data_source
。
Option Explicit
Dim booSourceUsual as boolean
Private Sub MyForm_Load()
booSourceUsual = False
Me!my_chk.Value = booSourceUsual
Call set_data_source
End Sub
Private Sub my_chk_AfterUpdate()
booSourceUsual = Me!my_chk.Value
Call set_data_source
End Sub