Erstellen Sie ein Endlosformular, dessen Höhe automatisch eingestellt wird

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

  •  21-12-2019
  •  | 
  •  

Frage

Ich versuche, die Höhe eines Endlosformulars so einzustellen, dass sie der Höhe der Kopfzeile + der Höhe der Fußzeile + der Höhe des Details entspricht.Dadurch soll vermieden werden, dass ein Formular mit nur zwei oder drei Datensätzen viel Leerraum enthält.Umgekehrt möchte ich, dass auf einem Formular eine große Anzahl von Datensätzen angezeigt wird, mit 10 Datensätzen pro Seite und Pfeil nach unten/oben, um den Rest der Datensätze anzuzeigen.Dies sind die Verfahren, die ich eingerichtet habe:

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

Es ignoriert die Anweisung IF… dann… sonst und erstellt ein Formular, das alle Datensätze in einem Fenster zeigt, das nicht verwaltbar ist.

Es funktioniert für eine Form von weniger als 11 Datensätzen (offensichtlich), aber ich finde, dass ich die Höhe eines zusätzlichen Datensatzes hinzufügen muss. Andernfalls wird der letzte Rekord auf einer zweiten Seite gestellt.Nämlich:

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

Ich kann damit leben, aber ich würde wirklich gerne das Problem lösen, dass die If…Then…Else-Anweisung ignoriert wird.

Ich habe die Typumwandlung auf „Variant“ und „Double“ geändert, aber das hat keinen Unterschied gemacht.

War es hilfreich?

Lösung

Es scheint ein Problem mit Ihrem Code zu geben:Sie nutzen FrmHt in deinem If Aussage, aber zu diesem Zeitpunkt hat sie keinen Wert, sie wird es immer sein 0.

Ich denke, Sie möchten wahrscheinlich, dass Ihre Aussage etwa so lautet:

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

Das andere Problem, dass sich der letzte Datensatz auf der nächsten Seite befindet, kann darin liegen, dass Sie die 10 Datensätze zu genau auf dem Bildschirm anzeigen und bei der Konvertierung von Twips in Pixel Rundungsfehler dazu führen können, dass die Gesamthöhe etwas geringer ist als erwartet notwendig für 10 Datensätze.
Versuchen Sie, ein paar Twips zu Ihrem hinzuzufügen FrmHT Ergebnis, um zu sehen, ob das funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top