• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Chamuanza

Rotina que não se completa

8 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A mostrares uma msgbox a textbox perde o focus e o evento é disparado. Usa o event KeyUp e define o Me.KeyPreview = True

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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á!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá JPaulino

Com este ultimo codigo volta a saltar para a rotina como fazia inicialmente

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora