psantos10 Posted May 10, 2011 at 03:36 PM Report #386641 Posted May 10, 2011 at 03:36 PM 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?
Caça Posted May 10, 2011 at 03:39 PM Report #386643 Posted May 10, 2011 at 03:39 PM 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
psantos10 Posted May 10, 2011 at 03:51 PM Author Report #386645 Posted May 10, 2011 at 03:51 PM 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?
Caça Posted May 10, 2011 at 03:55 PM Report #386647 Posted May 10, 2011 at 03:55 PM Esse problema é resolvido com o ShowDialog em vez do Show Pedro Martins Não respondo a duvidas por PM
psantos10 Posted May 10, 2011 at 03:59 PM Author Report #386649 Posted May 10, 2011 at 03:59 PM 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?
Caça Posted May 10, 2011 at 04:04 PM Report #386652 Posted May 10, 2011 at 04:04 PM 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
psantos10 Posted May 10, 2011 at 04:27 PM Author Report #386667 Posted May 10, 2011 at 04:27 PM 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?
psantos10 Posted May 11, 2011 at 04:02 PM Author Report #386933 Posted May 11, 2011 at 04:02 PM 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?
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now