Faça com que um formulário contínuo defina sua altura automaticamente

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

  •  21-12-2019
  •  | 
  •  

Pergunta

Estou tentando fazer com que um formulário contínuo defina sua altura para ser igual à altura do Cabeçalho + altura do Rodapé + altura do Detalhe.Isso evita que um formulário com apenas dois ou três registros tenha muito espaço em branco.Por outro lado, quero que um grande número de registros apareça em um formulário com 10 registros por página e seta para baixo/para cima para ver o restante dos registros.Estes são os procedimentos que configurei:

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

Ele ignora a declaração se ... então ... else e cria um formulário mostrando todos os registros em uma janela que é incontrolável.

Ele funciona para uma forma de menos de 11 registros (obviamente), mas acho que tenho que adicionar a altura de um registro extra, caso contrário, coloca o último registro em uma segunda página.Veja:

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

Posso conviver com isso, mas realmente gostaria de resolver o problema da instrução If…Then…Else ser ignorada.

Mudei a conversão de tipo para Variant e Double, mas isso não fez diferença.

Foi útil?

Solução

Parece haver um problema no seu código:você usa FrmHt na tua If afirmação, mas não tem valor nesse ponto, sempre será 0.

Acho que você provavelmente deseja que sua declaração seja algo como:

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

O outro problema do último registro estar na próxima página pode ser porque você está muito apertado ao exibir os 10 registros na tela e durante a conversão de twips para pixels, erros de arredondamento podem tornar a altura total um pouco menor do que seria. necessário para 10 registros.
Tente adicionar alguns twips ao seu FrmHT resultado para ver se isso funciona.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top