Сделать непрерывную форму автоматически устанавливающей ее высоту

StackOverflow https://stackoverflow.com//questions/25045069

  •  21-12-2019
  •  | 
  •  

Вопрос

Я пытаюсь сделать непрерывную форму, установив ее высоту, равную высоте верхнего колонтитула + высоте нижнего колонтитула + высоте детализации.Это сделано для того, чтобы форма, содержащая всего две или три записи, не имела большого количества пустого пространства.И наоборот, я хочу, чтобы в форме отображалось большое количество записей по 10 записей на странице и стрелка вниз/вверх, чтобы просмотреть остальные записи.Вот процедуры, которые я установил:

Public Function NumRecs() As Integer
    NumRecs = DCount("*", "tblDisclosure", "Not IsNull(FormSentOff) and IsNull(DBSInvoice))
End Function

Public Function FrmHt() As Integer
    Dim FrmDet As Integer
    Dim FrmHdr As Integer
    Dim FrmFtr As Integer

    FrmDet = Form.Section(0).Height
    FrmHdr = Form.Section(1).Height
    FrmFtr = Form.Section(2).Height

    If FrmHt > (11 * FrmDet + FrmHdr + FrmFtr) Then
        FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
    Else
        FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
    End If
End Function

Private Sub Form_Load()
    Me.Move Left:=8000, Top:=1000, Width:=9240, Height:=FrmHt
End Sub

Он игнорирует заявление if ... потом ... иначе и создает форму, показывающую все записи в одном окне, которая неуправляется.

Он работает для формы менее 11 записей (очевидно), но я обнаружил, что я должен добавить на высоту дополнительной записи, в противном случае он помещает последнюю запись на второй странице.А именно:

FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet

Я могу с этим жить, но мне бы очень хотелось решить проблему игнорирования оператора If…Then…Else.

Я изменил приведение типов на Variant и Double, но это не имело никакого значения.

Это было полезно?

Решение

Кажется, в вашем коде возникла проблема:ты используешь FrmHt в вашей If утверждение, но оно не имеет никакой ценности в этот момент, оно всегда будет 0.

Я думаю, вы, вероятно, хотите, чтобы ваше заявление было примерно таким:

If NumRecs > 11 Then
    FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
    FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top