Chamuanza Posted November 14, 2009 at 07:40 PM Report Share #296198 Posted November 14, 2009 at 07:40 PM 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 More sharing options...
jpaulino Posted November 14, 2009 at 09:56 PM Report Share #296216 Posted November 14, 2009 at 09:56 PM A mostrares uma msgbox a textbox perde o focus e o evento é disparado. Usa o event KeyUp e define o Me.KeyPreview = True Link to comment Share on other sites More sharing options...
Chamuanza Posted November 14, 2009 at 10:27 PM Author Report Share #296223 Posted November 14, 2009 at 10:27 PM 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 More sharing options...
jpaulino Posted November 14, 2009 at 11:09 PM Report Share #296233 Posted November 14, 2009 at 11:09 PM 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 More sharing options...
Chamuanza Posted November 15, 2009 at 10:53 AM Author Report Share #296276 Posted November 15, 2009 at 10:53 AM 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 More sharing options...
Chamuanza Posted November 15, 2009 at 02:15 PM Author Report Share #296297 Posted November 15, 2009 at 02:15 PM 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 More sharing options...
jpaulino Posted November 15, 2009 at 05:42 PM Report Share #296343 Posted November 15, 2009 at 05:42 PM 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 More sharing options...
Chamuanza Posted November 15, 2009 at 10:42 PM Author Report Share #296411 Posted November 15, 2009 at 10:42 PM Olá JPaulino Com este ultimo codigo volta a saltar para a rotina como fazia inicialmente Link to comment Share on other sites More sharing options...
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