Сделать непрерывную форму автоматически устанавливающей ее высоту
-
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
результат, чтобы увидеть, работает ли это.