如何重新绘制MS Access VBA中的子报表控件并调整其大小

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

我有一个名为rptClientCareAll的父报告。它由3个子报告控件组成。用户可以选择隐藏其中一个子报表的详细信息(如果相关,则这是用于隐藏子报表详细信息的代码:me.detail.visible = false)。

问题#1:当我独立于父报告打开子报告时(有时报告将显示为独立报告,有时显示为子报告,因此我需要它在两种情况下都能工作),细节被隐藏,但是报告没有“重新粉刷” - 所以,报告看起来很乱,因为页脚现在显示在标题的正下方,但细节没有从屏幕上“擦除”。如何“重新绘制”报告以删除详细信息?可以重新绘制表单,但我似乎无法重新绘制报表。

问题2:当我打开父报表然后选择隐藏子报表上的详细信息时,细节被正确隐藏并“擦除”(与上面的问题#1不同;很奇怪!),但是,子报表的大小不会缩小因此,隐藏细节的整个点都丢失了,因为在父报表上有大量的空白区域,其中包含子报表的详细信息。隐藏细节时,如何让子报表缩小?我已经尝试将所有报告(包括父报表和子报表)的详细信息部分'可以增长和可以收缩属性设置为是,但这没有帮助。

注意:我在acReportView中显示报告,而不是acViewPreview。这似乎可能会对触发的事件产生影响?

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

因此,在用户选择隐藏详细信息部分之后,基本上问题#1(报告独立打开,而不是作为子报告)由简单的Me.Requery解决。

如果没有关闭并重新加载报告,问题#2显然无法解决,这比我的情况要容易一些。

对于我的情况,我添加了代码来执行以下操作:

  1. 当用户单击以将子报表的细节切换为隐藏/可见时,(a)设置全局变量标志(布尔类型)以指示细节部分现在是隐藏的(假)还是可见的(真),(b)设置一个不同的全局变量以指示需要重新打开报告,以及(c)关闭报告。
  2. 在我的情况下,在父报表的关闭事件中,我必须在关闭报表时打开表单,因为我需要表单重新打开报表(如果重新打开报表的全局变量设置为True)一旦它被关闭,因为我无法找到一种方法来关闭并从内部重新打开报告。在表单中,我设置一个计时器事件,在333ms(TimerInterval = 333)之后触发,重新打开报告并关闭表单本身。 (当我尝试在窗体的Open事件中重新打开报表时,报表实际上永远不会打开,所以我添加了计时器以延迟时间,以便在尝试重新打开报表之前完全关闭报表。)(当然,如果重新打开报表的全局变量为False,那么表单就会关闭。)
  3. 在其详细信息部分在隐藏/可见之间切换的子报表中,在Open事件中,使用Me.Detail.Visible = {globalvariableflag}并设置全局变量以将报表重新加载为False(因为报表现已重新加载)。

它很笨重,但这是我能找到的唯一方法,可以根据需要完成隐藏和缩小细节部分。


-1
投票

在ON LOAD事件中使用以下代码:

Private Sub Form_Load()
Dim C As Control    

For Each C In Me.Form

    If TypeOf C Is TextBox Then

            If IsNull(C) Or C = "" Or C = 0 Or C = "0" Then
                C.Visible = False
                C.Height = 0
            Else
                C.Visible = True
            End If
    End If
Next C

Me.Requery

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