Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

johnhey

Abrir form somente uma vez

Recommended Posts

Boas pessoal, estou com uma dúvida, a tempo fiz um outro tópico aqui que infelizmente não consegui solução da forma que pretendia, então tive que mudar.

Mas isso é passado e vamos ao que realmente interessa.

Tenho um sistema com o nome de SIAF (Sistema Informático de Agências Financeiras)

Neste sistema tenho um mdiprincipal e um único form.

Todas as telas de cadastro tem os mesmos campos, por isso uso somente um form, apenas muda os nomes dos campos quando acesso.

Para abrir um form faço o seguinte:

Try

form.Showdialog()

'Se der erro exibe o erro

Catch EX As Exception

MsgBox("erro - " + EX.Message)

End Try

 

Vamos supor que abri o form para cadastro de Agente, depois sem fecha-lo abro outro para cadastro de Agências.

Caso eu fosse abrir novamente o form para cadastro de Agente o sistema iria ver todos os form que estão aberto e se ele já estiver apenas me traz para frente e não abrir um form novo.

 

Espero ter sido claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função

 

Private Function ProcuraForm(ByVal form_name As String) As Form
Dim i As Integer

Set ProcuraForm = Nothing

//Procura pelos forms carregados.
For i = 0 To Forms.Count - 1
  If Forms(i).Name = form_name Then
      //se encontramos retorna o form.
     Set ProcuraForm = Forms(i)
	Exit For
  End If
Next i
End Function

 

 

Você pode fazer esta função retornar um valor Boolean para caso você queira saber se o formulário esteja aberto mais facilmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas tenho que substituir o "FORMS" por alguma coisa?

 

porque esta a dar um erro.

 

 

Error 1 'Forms' is not declared. It may be inaccessible due to its protection level.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Public Shared Function isOpen(ByVal f As Form, Optional focus As Boolean = False) As Boolean

                   Static aloc As Form = f
                   Dim found As Boolean = False

                   For Each _form In Application.OpenForms
                       If _form Is aloc Then

                           If focus Then
                               _form.Focus()
                               found = True

                           Else
                               found = True
                           End If

                       Else
                           found = False
                       End If
                   Next

                   If found Then
                       Return True
                   Else
                       Return False
                   End If

               End Function

 

 

Fiz esta função agora aqui e funcionou, ela deve retornar True ou False, se for true ele está aberto se não está fechado.

 

Chame-a assim:

 

isOpen(nomedoform)

 

 

Você pode colocá-la em um if, else:

 

if isOpen(nomedoform) Then
(...)
end if

 

 

Se você colocar

 

isOpen(nomedoform, true)

 

Ele não só irá dizer se está aberto ou fechado mas tambem irá focalizar o formulário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.