Jump to content
psantos10

Fechar Formulário depois de confimar

Recommended Posts

psantos10

Prezados,

Fiz uma busca a respeito, mas o que encontrei não conseguiu resolver o meu problema que passo a descrever.

Tenho uma aplicação com tela de login (frmLogin) e uma tela principal (frmPrincipal)

- No "frmLogin" tenho um botão cancelar, que termina a aplicação. quando clico no botão cancelar, aparece a messagebox para confirmar. caso sim, ele fecha, caso não,  a aplicação continua a rodar. Até aqui tudo bem.

- Neste mesmo form (frmLogin) tem o botao entrar, com o seguinte código:

Private Sub btnEntrar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEntrar.Click
        Dim strLogin As String = Trim(txtLogin.Text)
        Dim strPassword As String = Trim(txtPassword.Text)
        Dim strPassword2 As String = String.Empty

        If strLogin = "" OrElse strLogin = String.Empty Then
            MessageBox.Show(Me, "Nome de utilizador inválido.", "SimplePOS v" & Application.ProductVersion, MessageBoxButtons.OK, MessageBoxIcon.Error)
            LimparCampos()
            Exit Sub
        End If

        If strPassword = "" OrElse strLogin = String.Empty Then
            MessageBox.Show(Me, "Senha inválida.", "SimplePOS v" & Application.ProductVersion, MessageBoxButtons.OK, MessageBoxIcon.Error)
            LimparCampos()
            Exit Sub
        End If

        strPassword2 = Cripto.HashString(strPassword)


        If (Login.CheckLogin(strLogin, strPassword2)) Then
            Dim status As Boolean = Config.setSession(strLogin, "ed3d2c21991e3bef5e069713af9fa6ca", 1)
            Dim MDIFrmPincipal As frmPrincipal = New frmPrincipal

            MDIFrmPincipal.Show()
            Me.Hide()
        Else
            Config.setSession("guest", "c4ca4238a0b923820dcc509a6f75849b", 0)
            MessageBox.Show(Me, "Nome de utilizador e/ou a Senha inválidos." & vbNewLine & "Tente novamente.", "SimplePOS v" & Application.ProductVersion, MessageBoxButtons.OK, MessageBoxIcon.Error)
            LimparCampos()
            Exit Sub
        End If

    End Sub

como podem ver, caso o utilizador seja válido eu escondo o frmLogin [ me.hide() ]. e utilizo [ frmPrincial.show() ] para abrir o formulario principal.

O Meu problema:

- no frmPrincipal, também faço a verificação ao tentar fechar o formulario como podem ver no código abaixo:

    Private Sub frmPrincipal_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If MessageBox.Show("Você tem certeza que deseja sair da Aplicação?", "Fechar aplicação.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
            e.Cancel = True
            Exit Sub
        Else
            Application.Exit()
            Config.setSession("guest", "c4ca4238a0b923820dcc509a6f75849b", 0)
        End If
    End Sub

- só que quando fecho, aparece a messagebox três vezes, ou seja, só depois de clicar tres vezes no botão sim da messagebox é que a aplicação fecha.

- tentei remover a verificação no frmLogin, aí ele aparece por duas vezes, ou seja, fecho a aplicação, aparece a messagebox, clico em sim, aparece novamente, so na segunda vez é que fecha.

como posso resolver isso? como posso evitar que a messagebox aparece por duas ou mais vezes?

grato pela atenção


-------Assinatura?

Share this post


Link to post
Share on other sites
Caça

O que deves fazer é colocar o tem menu como form principal e no load fazer o ShowDialog à form do login.

Se o resultado for igual a Ok significa que o login foi efectuado, se o resultado for igual a Cancel significa que não foi efectuado nenhum login.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
psantos10

O que deves fazer é colocar o tem menu como form principal e no load fazer o ShowDialog à form do login.

Se o resultado for igual a Ok significa que o login foi efectuado, se o resultado for igual a Cancel significa que não foi efectuado nenhum login.

fiz isso.. definir como startup form o frmPrincipal e no evento load deste formulário chamo pelo frmLogin.

mas o problema persiste, apesar de aparecer 2 vezes e não 3 vezes como da vez anterior.

e surgiu outro problema, se o utilizador clicar no botão fechar do frmLogin ele terá acesso a aplicação sem fazer o login.

e eu nem queria que o formPRincipal carregasse primeiro, porque estava a pensar em abrir forms diferentes para casos diferentes. Tipo, se o utilizador for operador, abre o frmMnuOperador, e se for Administrador, abre o frmMnuAdministrador.

grato pela atenção


-------Assinatura?

Share this post


Link to post
Share on other sites
Caça

Esse problema é resolvido com o ShowDialog em vez do Show


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
psantos10

Esse problema é resolvido com o ShowDialog em vez do Show

é exactamente isto que estou a fazer:

 Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Carregar formulário de Login...
        Dim fLogin As frmLogin = New frmLogin
        fLogin.ShowDialog()
    End Sub

onde estou a falhar?

grato pela atenção


-------Assinatura?

Share this post


Link to post
Share on other sites
Caça

Aqui

fLogin.ShowDialog()

Seria

If fLogin.ShowDialog() = Windows.Forms.DialogResult.OK Then
'Login efectuado
Else
'Login não efectuado
End If

e no login

Caso o login seja efectuado com sucesso

Me.DialogResult = Windows.Forms.DialogResult.OK

Caso o login não seja efectuado com sucesso ou o user clicar em cancelar

Me.DialogResult = Windows.Forms.DialogResult.Cancel


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
psantos10

nem com isso... :-(

tenho um submenu [sair] com o seguinte codigo:

Private Sub sMnuSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sMnuSair.Click
        Application.Exit()
    End Sub

quando executo, a dialogbox de confirmação so aparece uma vez, mas quando clico no X vermelho ou ALT+F4 o dialogbox aparece duas vezes.

cumps

PS


-------Assinatura?

Share this post


Link to post
Share on other sites
psantos10

Boas,

Depois de ter desistido ontem... pois já estava com a cabeça a arrebentar, resolvi deixar para outro dia (hoje).. e com muita calma, tentando entender a lógica do mesmo, cheguei a solução.

1º Voltei ao modelo antigo, onde ofrmLogin era aberto primeiro, depois de validados, abria o frmPrincipal e escondia o frmLogin.

2º Adicionei o seguinte código no evento form_Closing do frmLogin:

Private Sub frmLogin_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If e.CloseReason = CloseReason.UserClosing Then
            e.Cancel = True
            Application.Exit()
        Else
            If MessageBox.Show(Me, "Você tem certeza que pretende sair da Aplicação?", "Fechar aplicação...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
                e.Cancel = True
            Else
                Config.setSession("guest", "c4ca4238a0b923820dcc509a6f75849b", 0)
            End If
        End If
    End Sub

3º Alterei também o código do evento form_Closing do frmPrincipal:

Private Sub frmPrincipal_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If e.CloseReason = CloseReason.UserClosing Then
            e.Cancel = True
            Application.Exit()
        End If
    End Sub

4º Só consigo sorrir: :-) :-) :-)

5º Valeu pela ajuda amigo Caça

cumps

PS


-------Assinatura?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.