在父级为表单的子报表中滚动
Scrolling in subreports where parent is a form
我在滚动窗体的 Sub Report/Form 控件中的报表时遇到问题。我可以通过单击并拖动滚动条来滚动,但我想使用鼠标滚轮。
我认为这 functionality was removed 是 2007 年到 2010 年过渡期间自然发生的事情。 (我知道链接说它适用于子表单,但我很确定它也适用于基于我读过的所有其他内容的子报表)。
我像这样修改了他们的解决方法代码
Private Sub Report_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
Dim r As Long
If Not Me.Dirty Then
Do While r < Abs(Count)
If (Count < 0) And (Me.CurrentRecord >= 1) Then
DoCmd.GoToRecord , , acPrevious, 1
ElseIf (Count > 0) then 'And (Me.CurrentRecord < Me.Count) Then 'This said Me.RecordSet.RecordCount but that was wrong. Also looking at the count here seems to just mess things up actually.
DoCmd.GoToRecord , , acNext, 1
End If
r = r + 1
Loop
End If
End Sub
但是当控件具有焦点时,这根本不起作用。显示 "June 2016" 的文本框是下图中具有焦点的内容。
它 在只有一个报表节 focus/no 控件具有焦点时工作得很好。 IE。当您单击报表宽度右侧的时。我不确定这个状态到底叫什么。
我不知道如何设置该部分以使 focus/take 焦点远离所有其他可聚焦控件。
编辑:
您可以通过以下步骤重现我尝试修复的场景(这是 Access 2010,但它应该适用于 Access 2013。我不能说 2016)
在新数据库中做一些测试table
根据该数据制作基本报告
创建新表单并将该基本报表添加为 Subform/Subreport
对象
当您 运行 在窗体视图中打开窗体时,将焦点放在子报表上并使用鼠标滚轮没有任何反应。框架不滚动,CurrentRecord 也不更改。
要防止子报表上的控件获得焦点,可以将它们全部设置为Enabled = No
。这应该将重点放在部分上。
FWIW,我试图重现这一点,但对我来说,未绑定表单上的子报表(在报表视图中)永远不会用鼠标滚轮滚动。无论焦点在哪里。
Edit 有了 Report_MouseWheel
代码,它就可以工作了。为了测试目的,我用测试中的记录数 table 替换了 Me.Recordset.RecordCount
。
一般来说,我觉得做这件事很奇怪(将子报表放在窗体上)。
编辑2啊,明白了,分组。好的
我尝试在详细信息部分上方放置一个透明按钮,以防止禁用的控件不可点击,但这没有用。
我发现一个可行的解决方法是首先将报告封装在另一个(空)报告中,然后将嵌套报告作为 sub-report 添加到表单中。这样滚动似乎保持不变。
这种方法的一个问题是加载时间会受到影响。我发现它特别会减慢具有大量查询或大量数据的报告。
如果 MS 能解决这个滚动问题,生活会轻松很多。
如果有人知道更好的方法,我会洗耳恭听!
我在滚动窗体的 Sub Report/Form 控件中的报表时遇到问题。我可以通过单击并拖动滚动条来滚动,但我想使用鼠标滚轮。
我认为这 functionality was removed 是 2007 年到 2010 年过渡期间自然发生的事情。 (我知道链接说它适用于子表单,但我很确定它也适用于基于我读过的所有其他内容的子报表)。
我像这样修改了他们的解决方法代码
Private Sub Report_MouseWheel(ByVal Page As Boolean, ByVal Count As Long)
Dim r As Long
If Not Me.Dirty Then
Do While r < Abs(Count)
If (Count < 0) And (Me.CurrentRecord >= 1) Then
DoCmd.GoToRecord , , acPrevious, 1
ElseIf (Count > 0) then 'And (Me.CurrentRecord < Me.Count) Then 'This said Me.RecordSet.RecordCount but that was wrong. Also looking at the count here seems to just mess things up actually.
DoCmd.GoToRecord , , acNext, 1
End If
r = r + 1
Loop
End If
End Sub
但是当控件具有焦点时,这根本不起作用。显示 "June 2016" 的文本框是下图中具有焦点的内容。
它 在只有一个报表节 focus/no 控件具有焦点时工作得很好。 IE。当您单击报表宽度右侧的时。我不确定这个状态到底叫什么。
我不知道如何设置该部分以使 focus/take 焦点远离所有其他可聚焦控件。
编辑:
您可以通过以下步骤重现我尝试修复的场景(这是 Access 2010,但它应该适用于 Access 2013。我不能说 2016)
在新数据库中做一些测试table
根据该数据制作基本报告
创建新表单并将该基本报表添加为
Subform/Subreport
对象当您 运行 在窗体视图中打开窗体时,将焦点放在子报表上并使用鼠标滚轮没有任何反应。框架不滚动,CurrentRecord 也不更改。
要防止子报表上的控件获得焦点,可以将它们全部设置为Enabled = No
。这应该将重点放在部分上。
FWIW,我试图重现这一点,但对我来说,未绑定表单上的子报表(在报表视图中)永远不会用鼠标滚轮滚动。无论焦点在哪里。
Edit 有了 Report_MouseWheel
代码,它就可以工作了。为了测试目的,我用测试中的记录数 table 替换了 Me.Recordset.RecordCount
。
一般来说,我觉得做这件事很奇怪(将子报表放在窗体上)。
编辑2啊,明白了,分组。好的
我尝试在详细信息部分上方放置一个透明按钮,以防止禁用的控件不可点击,但这没有用。
我发现一个可行的解决方法是首先将报告封装在另一个(空)报告中,然后将嵌套报告作为 sub-report 添加到表单中。这样滚动似乎保持不变。
这种方法的一个问题是加载时间会受到影响。我发现它特别会减慢具有大量查询或大量数据的报告。
如果 MS 能解决这个滚动问题,生活会轻松很多。
如果有人知道更好的方法,我会洗耳恭听!