Динамическое изменение размера области отчета - PullRequest
3 голосов
/ 29 июля 2011

Возможно ли динамическое изменение размера области сведений отчета в MS Access?

У меня есть отчет, а в области «Детали» есть 2 строки, я хотел бы, чтобы одна из них была «необязательной» - когда нет данных, она не должна отображаться, а область «Детали» должна быть такой же высокой, как и верхняя строка. данных.

У меня есть такой код:

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
    Dim reduceHeight As Integer
    reduceHeight = Me.Label83.Height


    If IsNull(Me.data_1) Then
        Me.data_1.Visible = False
        Me.Label83.Visible = False
    Else
        Me.data_1.Visible = True
        Me.Label83.Visible = True
    End If

    If IsNull(Me.data_1) 
        Detail.Height = Detail.Height - reduceHeight
    End If

End Sub

И это работает, если сделать метку и текстовое поле условно видимыми, но я не могу уменьшить область детализации, когда нижняя строка скрыта. Я сделал установил свойство CanShrink для детализации на True, но оно не уменьшается.

Ответы [ 2 ]

4 голосов
/ 19 июня 2013

Привет: я понимаю, что у вас есть ярлыки.Поскольку ярлыки не могут сжиматься, вам нужно написать код.

Динамическая игра с отчетами - сложная задача.При изменении высоты или ширины раздела все элементы управления должны оставаться внутри новой области, иначе у вас возникнут проблемы.Когда вы перемещаете элемент управления, он должен оставаться внутри области раздела, иначе у вас возникнут проблемы.Кроме того, вы должны отключить Autoshrink для раздела.

Теперь это пример.Вы должны изменить его в соответствии с вашими требованиями.Вот код отчета:

Option Compare Database
Option Explicit

Private twipsPerLine As Integer     ' The height of a line in your report
Private detailHeight As Integer     ' The height of your detail section
Private vPos As Integer             ' The vertical position of the control
                                'following the one you want to hide

Private Sub Report_Open(Cancel As Integer)
    ' Set the values
    vPos = data_2.Top
    twipsPerLine = data_2.Top - data_1.Top
    detailHeight = Me.Detail.Height
End Sub

Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)

    If (IsNull(Me.data_1.Value)) Then
        ' First, you hide the controls
        Me.data_1.Visible = False
        Me.data_1_label.Visible = False
        ' Then, you set the position of the rest of the controls (up)
        data_2_label.Move data_2_label.Left, vPos - twipsPerLine
        data_2.Move data_2.Left, vPos - twipsPerLine
        ' Finally, you shrink the detail section height
        Me.Detail.Height = detailHeight - twipsPerLine
    Else
        ' First, you show the controls
        Me.data_1.Visible = True
        Me.data_1_label.Visible = True
        ' Then, you reset the section height
        Me.Detail.Height = detailHeight
        ' Finally, you reset the position of the rest of the controls
        data_2_label.Move data_2_label.Left, vPos
        data_2.Move data_2.Left, vPos
    End If

End Sub

Это приближение дает вам полный контроль над отчетом и работает, даже если у вас есть надписи, изображения или что-то еще.

enter image description here

4 голосов
/ 29 июля 2011

Установить CanShrink и для ваших элементов управления (например, текстовые поля):

enter image description here enter image description here

...