Jump to content

Rotina que não se completa


Chamuanza
 Share

Recommended Posts

Um Bem Aja pessoal

Estou com uma situação que preciso de ajuda e passo a explicar

Tenho uma rotina que se inicia com um IF mas que não apresenta a mensagem mesmo com as condições verdadeiras

 Private Sub DepositoTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DepositoTextBox.KeyPress


        If DepositoTextBox.Text = "" And DespesaTextBox.Text = Trim("0,00 €") Then
            MsgBox("O Valor de Despesa está a zero")
            ' *** Não aparece a mensagem, saltando para a rotina que apresento a seguir com um erro ***
            DespesaTextBox.Focus()
            Exit Sub
        End If


        'Só numeros e backspace
        If Char.IsLetter(e.KeyChar) Then
            e.Handled = True
        End If


        'Mandar o foco para o proximo control
        If e.KeyChar = Convert.ToChar(Keys.Return) Then
            e.Handled = True
            BalancoTextBox.Focus()
        ElseIf e.KeyChar = "."c Then
            'converte o ponto para virgula
            e.Handled = True
            SendKeys.Send(",")
        End If

    End Sub

Salta para esta rotina

 Private Sub DepositoTextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepositoTextBox.LostFocus

        Dim NumeroLinha As Integer = Me.Table1DataGridView.Rows.Count - 2
        Dim UltimoBalanco As Decimal


        'Faz o acerto do balanço após novo registo de despesa ou receita
        If DespesaTextBox.Text > 0 Then
            UltimoBalanco = Me.Table1DataGridView(5, NumeroLinha - 1).Value - DespesaTextBox.Text

            BalancoTextBox.Text = UltimoBalanco

        ElseIf DepositoTextBox.Text > 0 Then [quote]apresenta o erro - Conversion from string "" to type 'Double' is not valid.[/quote]

            UltimoBalanco = Me.Table1DataGridView(5, NumeroLinha - 1).Value + DepositoTextBox.Text

            BalancoTextBox.Text = UltimoBalanco

            'CategoriasComboBox.SelectedIndex = 5

        End If

        ' CategoriasComboBox.Focus()


    End Sub
Link to comment
Share on other sites

Oi Paulino estou a fazer assim mas não funciona, continua a saltar para a outra rotina

 Private Sub DepositoTextBox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DepositoTextBox.KeyUp

        If DepositoTextBox.Text <> " " And DespesaTextBox.Text = Trim("0,00 €") Then
            MsgBox("O Valor de Despesa está a zero" & vbCrLf & "O Valor de Depósito está Nulo" & vbCrLf & "Altere um dos Valores", MsgBoxStyle.Information, "Alterar Valor Despesa/Depósito")
            DespesaTextBox.Focus()
            Me.KeyPreview = True
            Exit Sub
        End If

    End Sub

Tentei com    Me.KeyPreview = True colocado dentro e fora do if mas não resultou

Link to comment
Share on other sites

Assim vai executar sempre a outra rotina, acho que já entendi o que queres.

Usa o RemoveHandler e depois o AddHandler

    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If True Then
            RemoveHandler Me.TextBox1.LostFocus, AddressOf TextBox1_LostFocus
            MessageBox.Show("Isto é um teste!")
            AddHandler Me.TextBox1.LostFocus, AddressOf TextBox1_LostFocus
        End If
    End Sub

    Private Sub TextBox1_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.LostFocus
        ' código no evento LostFocus
    End Sub
Link to comment
Share on other sites

Oi JPaulino

desde ontem que ando as voltas com o exemplo que me enviaste,mas só em parte funcionou.

já não salta para a rotina seguinte, mas sempre que faço enter para introduzir um valor no deposito aparece sempre a mensagem

depois de muitas tentativas estou a usar desta maneira a rotina - se calhar não estou a usar o RemoveHandle e o

AddHandler nos sitios certos

 Private Sub DepositoTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles DepositoTextBox.KeyPress


        'Só numeros e backspace
        If Char.IsLetter(e.KeyChar) Then
            e.Handled = True
        End If


        If True Then
            RemoveHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus

            If DepositoTextBox.Text <> " " OrElse DepositoTextBox.Text <> "" Then
                MsgBox("O Valor de Despesa está a zero" & vbCrLf & "O Valor de Depósito está Nulo" & vbCrLf & "Altere um dos Valores", MsgBoxStyle.Information, "Alterar Valor Despesa/Depósito")

                DepositoTextBox.Text = "0,00 €"
                DespesaTextBox.Text = ""
                DespesaTextBox.Focus()
                'DesignacaoTextBox.Text = ""
                'DesignacaoTextBox.Focus()
                'DepositoTextBox.Focus()

                Exit Sub

            End If
            AddHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus

        End If

        'Mandar o foco para o proximo control
        If e.KeyChar = Convert.ToChar(Keys.Return) Then
            e.Handled = True
            BalancoTextBox.Focus()
        ElseIf e.KeyChar = "."c Then
            'converte o ponto para virgula
            e.Handled = True
            SendKeys.Send(",")
        End If
    End Sub
Link to comment
Share on other sites

Oi  JPaulino

Resolvido o Topico com a tua dica, ficou assim:

If True Then
            RemoveHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus

            If DespesaTextBox.Text = "0,00 €" And DepositoTextBox.Text = "" Then
                MsgBox("O Valor de Despesa está a zero" & vbCrLf & "O Valor de Depósito está Nulo" & vbCrLf & "Altere um dos Valores", MsgBoxStyle.Information, "Alterar Valor Despesa/Depósito")

                DepositoTextBox.Text = "0,00 €"
                DespesaTextBox.Text = ""
                DespesaTextBox.Focus()
             
                 Exit Sub

            End If
            AddHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus

        End If

Obrigado pela ajuda

Link to comment
Share on other sites

Deves remover  e adicionar o Handle apenas quando mostras a rotina e não dessa forma. Imagina que a condição que tens é verdadeira e que faz o Exit Sub ... não voltas a definir um evento para a textbox DepositoTextBox.

Tenta assim:

            If DespesaTextBox.Text = "0,00 €" And DepositoTextBox.Text = "" Then
                RemoveHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus
                MsgBox("O Valor de Despesa está a zero" & vbCrLf & "O Valor de Depósito está Nulo" & vbCrLf & "Altere um dos Valores", MsgBoxStyle.Information, "Alterar Valor Despesa/Depósito")
                AddHandler Me.DepositoTextBox.LostFocus, AddressOf DepositoTextBox_LostFocus

                DepositoTextBox.Text = "0,00 €"
                DespesaTextBox.Text = ""
                DespesaTextBox.Focus()
             
                 Exit Sub
            End If

Assim, só quando mostrar a msgbox é que não corre o outro código 🙂

Tenta lá!

Link to comment
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
 Share

×
×
  • 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.