FECHAR FORM

SANROMAN 16/02/2015 00:04:01
#444538
Boa noite

Como fechar um form aberto em showdialog e fechar também o form que o requisitou.

Parece simples, mas vejam o problema. O form aberto em showdialog e um form de permissão aonde o usuário tem que digitar sua senha para ter acesso.

Esse form de permissão é usado por vários forms para que o usuário tenha acesso.

Gostaria que ao cancelar uma requisição de acesso fechasse o form de permissão e apenas o form que o requisitou por último.

Um abraço a todos, aguardo, se possível, ajuda.
MOUSER 16/02/2015 08:19:38
#444539
Pelo o que entendi, assim que o usuario digita a senha e abri uma nova form, você digita frmFormanterior.Close no load da form que foi aberta.

exemplo
Form1 (é o da senha)

Private Sub Form2_load (...) ...
Form1.Close
End Sub

Qualquer coisa se der erro tenho uma segunda opção também. Usada muito para Login.
SANROMAN 16/02/2015 12:38:52
#444542
Bom dia MOUSER

O usuário digita a senha, abre o form requisitado e fecha o form permissão através de Me.close no botão OK do form permissão.

Até ai tudo funciona perfeitamente, sem surpresas, o usuário possuindo a senha pode abrir qualquer form de acesso restrito.

O problema ocorre quando o usuário canceta a requisição para abrir um form de acesso restrito.

O form permissão pode abrir vários forms de acesso restrito. Como fechar apenas o form de acesso restrito que chamou por último o form permissão.

Requisito o form de acesso restrito com o seguinte código>

form de acesso restrito com SHOW
form permissão com SHOWDIALOG

Poderia fechar os forms com o seguinte código no botão cancelar.

If Application.OpenForms.OfType(Of frmManutencaoEstoque).Count() > 0 Then
frmManutencaoEstoque.Close()
End if.
Me.Close

Funciona, se abrisse apenas um form com o form permissão. Mas o form permissão pode abrir vários forms de acesso restrito. Ai voltamos a pergunta:

Como fechar último form a requisitar acesso através do botão cancelar do form permissão.

NICKOSOFT 16/02/2015 14:04:45
#444544
Resposta escolhida
a tela q vai abrir a da senha
  
Dim telanova As New Form5 [ô]nome da tela a abrir
telanova.tela = Me [ô]uma variável publica
telanova.ShowDialog() [ô]abre modal

a tela da senha e o botão cancelar
  
Public tela As Form [ô]a variável publica


Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
tela.Dispose() [ô]fechando a tela q chamou a abertura
Me.Dispose() [ô]fechando a tela modal

End Sub
SANROMAN 16/02/2015 15:27:12
#444546
Boa tarde NICKOSOFT

Me desculpe, me expressei erroneamente.

Todos os formulários são acessados através de botões no form Principal.

Seu código funciona, só que como falei que gostaria que ao clicar em cancelar fechasse o form que requisitou a chamada e todos os forms são acessados através do form principal o aplicativo e fechado.

Ao clicar no botão cancela, gostaria que fechasse o form permissão e também o form que estava sendo requisitado e não o form Principal que hospeda os botões de acesso.

Espero que tenha conseguido me colocar melhor e assim possa contar com sua ajuda.

NICKOSOFT 16/02/2015 23:57:06
#444557
Mas se vc nao abre o form requisitado ate q a senha esteja certa ele nem existiria no cancelar, nao entendo pq tem q criar o form e aguardar a senha, e ai se nao tiver, destruir tela de permissao e uma tela requisitada sem qq utilidade
JOSEC 17/02/2015 00:30:53
#444558
Acho que você pode usar o Evento.Close, nos Form que você quer fechar, ainda não vejo problema que você ta criando, acho que ta muito simples de resolver.

Por Exemplo:
Form Principal - Cadastro de Medicamento - Bulário em .ShowDialog()
Dai Usei um Botão de Fechar. e Coloquei
Frm_cad_med.close
Me.close (Bulario)
e fecha os Dois retornando ao Form Principal.
Qualquer coisa me Fala..
NICKOSOFT 17/02/2015 05:30:21
#444564
vamos la, se realmente sente q precisa abrir o form de destino de fundo....
no mdi form principal
  
Public Class MDIParent1

Private Sub AbrirToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles AbrirToolStripMenuItem.Click
Dim telaabrir As New frmabrir
telaabrir.MdiParent = Me
telaabrir.Show()
Dim telaseg As New frmseguranca
telaseg.destino = telaabrir
telaseg.ShowDialog()
End Sub

Private Sub AlterarToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles AlterarToolStripMenuItem.Click
Dim telaAlterar As New frmalterar
telaAlterar.MdiParent = Me
telaAlterar.Show()
Dim telaseg As New frmseguranca
telaseg.destino = telaAlterar
telaseg.ShowDialog()
End Sub
End Class

form modal não pode ser filho do mdi principal.....

já no form segurança
  
Public Class frmseguranca
Public destino As Form

Private Sub btnCancelar_Click(sender As System.Object, e As System.EventArgs) Handles btnCancelar.Click
Me.Dispose()
destino.Dispose()
End Sub

End Class
SANROMAN 17/02/2015 13:56:05
#444568
Boa tarde NICKOSOFT

Ainda não tentei com o código que você postou por último. Mas arrumei um jeito de usar o código que postou da primeira vez.

Ao invés de colocar o código no botão que chama os forms, coloquei dentro de um botão acesso em cada form.

Ficou assim o código:

No botão que chama os forms:

<code>If sstGrupo.Text = [Ô]Administrador[Ô] Then
If Application.OpenForms.OfType(Of frmControle).Count() > 0 Then
MsgBox([Ô]O Formulário CONTRÔLE já está aberto.[Ô], MsgBoxStyle.Critical)
frmControle.WindowState = FormWindowState.Normal
Exit Sub
Else
frmControle.Show()
End If
Else
If Application.OpenForms.OfType(Of frmControle).Count() > 0 Then
MsgBox([Ô]O Formulário CONTRÔLE já está aberto.[Ô], MsgBoxStyle.Critical)
frmControle.WindowState = FormWindowState.Normal
Exit Sub
Else
frmControle.Show()
frmControle.btnAcesso.PerformClick()
End If
End If</code>

No botão cancelar do form permissão:

<code>tela.Dispose()
Me.Dispose()

no botão de acesso dos formulários

<code> Dim telanova As New frmPermissao [ô]nome da tela a abrir
telanova.tela = Me
telanova.ShowDialog() </code>

Funcionou perfeitamente, espero seu comentário.

JOSEC valeu a ajuda.
NICKOSOFT 17/02/2015 14:21:12
#444569
tranquilo, se atendeu da forma q fez tudo bem, as vezes por texto fica difícil entendermos exatamente a necessidade, e nunca existe apenas uma forma de fazer algo funcionar...
SANROMAN 17/02/2015 15:28:59
#444570
Valeu, sem sua ajuda ficaria mas complicado.
Estou encerrando o tópico
Tópico encerrado , respostas não são mais permitidas