Faire un formulaire continu de régler sa hauteur automatiquement
-
21-12-2019 - |
Question
Je suis en train de faire un formulaire continu de régler sa hauteur égale à la hauteur de l'en-Tête + la hauteur de Pied de page + hauteur du Détail.C'est pour éviter d'avoir un formulaire avec seulement deux ou trois enregistrements ont une grande quantité d'espace vide.A l'inverse, je veux avoir un grand nombre de l'affichage des enregistrements dans un formulaire avec 10 enregistrements par page et la flèche Haut/Bas pour voir le reste des enregistrements.Voici les procédures à suivre j'ai mis en place:
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
Il ignore le if...then... Else et crée un formulaire indiquant tous les dossiers dans une fenêtre ce qui est ingérable.
Il travaille pour un formulaire de moins de 11 dossiers (évidemment), mais je trouve que j'ai à ajouter à la hauteur d'un enregistrement supplémentaire sinon il met le dernier enregistrement sur une deuxième page.À savoir:
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
Je peux vivre avec cela, mais j'aimerais vraiment résoudre le problème de l'if...then...Else être ignoré.
J'ai changé le type coulée de Variante et Double, mais cela ne faisait aucune différence.
La solution
Il semble y avoir un problème dans votre code:vous utilisez FrmHt
dans votre If
déclaration, mais il n'a pas de valeur à ce point, il sera toujours 0
.
Je pense que probablement, vous voulez que votre déclaration soit quelque chose comme:
If NumRecs > 11 Then
FrmHt = 11 * FrmDet + FrmHdr + FrmFtr
Else
FrmHt = (NumRecs * FrmDet) + FrmHdr + FrmFtr + FrmDet
End If
L'autre problème du dernier enregistrement sur la page suivante peut être parce que vous êtes trop serré à l'affichage de l'10 enregistrements sur l'écran et lors de la conversion de twips en pixels des erreurs d'arrondi peuvent faire de la hauteur totale d'un tout petit peu moins que ce qui serait nécessaire pour les 10 enregistrements.
Essayez d'ajouter un peu de twips à votre FrmHT
résultat pour voir si cela fonctionne.