bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Função para fechar todos os formulários

... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Função para fechar todos os formulários

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

Em certas situações é necessário forçar o fechamento de formulários.  Por exemplo, o aplicativo Maestro que ofereço neste site, faz uso desta técnica de fechar os formulários para poder realizar o logoff e trocar de usuário.

Quando um formulário é aberto, ele assume um número que começa do zero(0).  Podemos identificar o nome de um formulário aberto, através deste número.  Exemplo de dois formulários abertos:

forms(0).name :::> frmLogin

forms(1).name :::> frmClientes

A propriedade count retorna à quantidade de formulários que estão abertos.  Exemplo:

forms.count :::> 2

Vamos supor que eu feche o formulário frmLogin do exemplo acima, o número de identificação será  atualizado automaticamente e o formulário frmClientes passará a ser identificado pelo zero(0)

forms(0).name :::> frmClientes

forms(1).name :::> Erro 2456 - número inválido

Observe na função abaixo que o laço FOR foi configurado para percorrer os formulários do maior número de identificação para o menor (step -1), justamente por causa da reconfiguração automática dos números de identificação dos formulários abertos que ocorre quando um deles é fechado.

Public sub fncFechaForms(Optional booLogOff As Boolean = False)
On Error Resume Next
Dim j As Integer, nf As Integer
'------------------------------------------------------------
'Armazena na variável nf, a quantidade de formulários abertos
'------------------------------------------------------------
nf = Forms.Count 
'-----------------------------------------------------------------------------
'Percorre os formulários abertos,do maior número de identificação para o menor
'-----------------------------------------------------------------------------
For j = (nf - 1) To 0 Step -1
   If booLogOff Then
      '------------------------------------------------------------------------
      'Fecha todos os formulários, mantendo aberto apenas o formulário frmLogin
      '------------------------------------------------------------------------
      If Not Forms(j).Name = "frmLogin" Then
         DoCmd.Close acForm, Forms(j).Name, acSaveYes
      End If
   Else
      '-------------------------------------------------------
      'Fecha todos os Forms, incluindo o formulário de Login
      '-------------------------------------------------------
      DoCmd.Close acForm, Forms(j).Name, acSaveYes
   End If
Next j
End sub

Para realizar o logoff a função é chamada assim:

call fncFechaForms(true) :::> fecha todos os formulários, exceto o formulário de Login (frmLogin)

Ao encerrar o aplicativo, a função é chamada para fechar todos os formulários:

call fncFechaForms() :::> fecha todos os formulários.

Bom estudo!


 

 


1 comentário(s)

Sales   09/01/2018 19:01:10

Boa noite,
Fiz um botão para fechar os formulários, exceto um, mas ta fechando todo o banco de dados.
Help

Private Sub REABRIR_Click()
Call fncFechaFormsPS(True)
Me.SITUAÇÃO.Value = "CANCELADO"
End Sub

Public Function fncFechaFormsPS(Optional booLogOff As Boolean = False)
'----------------------------------
'fecha todos os formulários abertos
'----------------------------------
On Error Resume Next
Dim j As Integer, NF As Integer
NF = Forms.Count
For j = (NF - 1) To 0 Step -1
If booLogOff Then
If Not Forms(j).Name = "F_PS_CADASTRO" Then
DoCmd.Close acForm, Forms(j).Name, acSaveYes
End If
Else
DoCmd.Close acForm, Forms(j).Name, acSaveYes
End If
Next j
End Function


Envie seu comentário: