在父级为表单的子报表中滚动
Posted
技术标签:
【中文标题】在父级为表单的子报表中滚动【英文标题】:Scrolling in subreports where parent is a form 【发布时间】:2017-06-13 22:05:15 【问题描述】:我在表单上的子报表/表单控件中的报表中滚动时遇到问题。我可以通过单击并拖动滚动条来滚动,但我想使用鼠标滚轮。
我认为这个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
但是当控件具有焦点时,这根本不起作用。显示“2016 年 6 月”的文本框是下图中的焦点。
当只有报表部分有焦点/没有控件有焦点时,它确实工作得很好。 IE。当您单击报告宽度的右侧时。我不确定这个状态到底是什么。
我不知道如何设置该部分以使焦点远离其他所有可聚焦控件。
编辑:
您可以通过以下步骤重现我正在尝试修复的场景(这是 Access 2010,但它应该适用于 Access 2013。我不能说 2016)
在新数据库中创建一些测试表
根据该数据制作基本报告
创建一个新表单并将该基本报表添加为Subform/Subreport
对象
当您在表单视图中运行打开表单时,将焦点放在子报表中并使用鼠标滚轮没有任何反应。框架不滚动,CurrentRecord 也不改变。
【问题讨论】:
我不确定这是否适用于子报表,但这里有一个部分列表,以防您以前没有看过它:msdn.microsoft.com/en-us/library/office/ff192668.aspx。也许您可以访问子报表Forms.frmName....Form.sfrmName...
之类的子报表; Reports.rptName...Report.srptName
。 Hth.
如果有解决方案我会很感兴趣 - 我有同样的问题并且有类似的解决方法,只有当表单不是控件具有焦点时才有效。我想知道在单击任何控件时将焦点设置到子容器是否有效?
这就是我的想法。我没有马上想到我上面的评论仍然涉及点击和设置焦点。也许不是想要的,但可能会奏效。我怀疑只是悬停和滚动是可能的。
我在 access 2010 上试过这个,但无法重新制作。无论列或行是否具有焦点,它都会滚动/导航每条记录。
@wazz 我在表单中使用子报表(对象类型,但我的报表本身没有子报表)。它确实有所不同,因为报表中的子报表可以正常工作。我的文件是一个 accdb。
【参考方案1】:
要防止子报表上的控件获得焦点,您可以将它们全部设置为Enabled = No
。这应该将重点放在这些部分上。
FWIW,我试图重现这一点,但对我来说,未绑定表单上的子报表(在报表视图中)永远不会用鼠标滚轮滚动。无论焦点在哪里。
编辑 有了Report_MouseWheel
代码,它就可以工作了。我将Me.Recordset.RecordCount
替换为测试表中的记录数,用于测试目的。
一般来说,我觉得这是一件很奇怪的事情(将子报表放在表单上)。
编辑 2 啊,我明白了,分组。好的。
我尝试在详细信息部分上方放置一个透明按钮,以防止禁用的控件不可点击,但这不起作用。
【讨论】:
这更好,因为不应该关注的东西不能拥有它。这确实意味着尽管有人试图将焦点放在子报表中以滚动它,但除非他们在控件之间单击,否则无法做到这一点。也许没关系。 原因是我有太多数据无法一次显示所有内容,我需要分组。子表单不能像报表那样进行分组,报表本身也不能像表单那样进行动态过滤。因此,我在表格中有一份报告。关于您尝试复制,这是正确的。这就是为什么我在 MouseWheel 事件中有该代码的原因。但是,如果在DoCmd.GoToRecord , , acNext, 1
/acPrevious
期间焦点位于文本框(或其他可聚焦控件)中,则会发生各种奇怪的事情。特别是因为报表中的 CurrentRecord 与分组级别相关。
我觉得如果我有策略地隔开一些东西,这样用户就可以点击大多数地方,这是一个很好的解决方案。不完美,但肯定比以前更好。【参考方案2】:
我发现一个可行的解决方法是首先将报表封装在另一个(空)报表中,然后将嵌套报表作为子报表添加到表单中。这种方式滚动似乎保持不变。
这种方法的一个问题是加载时间会受到影响。我发现它尤其会减慢包含大量查询或大量数据的报告。
如果这个滚动问题可以由 MS 解决,生活会轻松很多。
如果有人知道更好的方法,我会全力以赴!
【讨论】:
以上是关于在父级为表单的子报表中滚动的主要内容,如果未能解决你的问题,请参考以下文章
仅在 Safari 中 - 位置:固定子级在父级为位置时被切断:固定且溢出:隐藏