Ir para conteúdo
Fórum Script Brasil
  • 0

Backspace só deleta o numero temporariamente(ele reaparece caso outro


Gustavo Almeida

Pergunta

Galera estou fazendo um programa para controle de gastos, e ele esta seguindo uma rotina estranha e que eu não consigo resolver.

O Problema é o seguinte: Existe uma TextBox na qual o usuário insere o valor do gasto/recebimento, está tudo funcionando direitinho

até o momento em que o usuário deleta um numero dessa TextBox. Ao deletar, na tela do usuário o numero desaparece, mas quando ele

insere um novo numero, o numero que foi deletado reaparece...

Acredito que o problema esteja no modo que utilizei para colocar a ","(virgula) na segunda casa do numero, se souberem outro jeito de colocar a virgula

ou então uma forma para fazer o backspace deletar de verdade por favor me ajude.

Código Relacionado ao Problema:

Variáveis Pré Declaradas:

Dim LimparTextBoxValor As Boolean = True

Dim LimparTextBoxDescrição As Boolean = True
Dim LimparTextBoxDetalhes As Boolean = True
Dim valorAtual As Double = 0
Dim ValorDepoisDoBackspace As Double = 0
Dim CursorNoFimDaLinhaAposPrimeiroClick As Boolean = True

Private Sub TrataCaractereRecebido(sender As Object, ByVal UltimaTeclaApertada As System.Windows.Forms.KeyPressEventArgs) Handles ValorTextBox.KeyPress
Dim caractereApertado As Char = UltimaTeclaApertada.KeyChar
If (Char.IsDigit(caractereApertado)) Then
AtualizarValor(caractereApertado)
UltimaTeclaApertada.Handled = True
ElseIf Char.IsControl(caractereApertado) Then
Else
MsgBox("Digite Apenas Numeros Por Favor")
UltimaTeclaApertada.Handled = True
End If
ColocaCursorNaUltimaPosicao(ValorTextBox)
End Sub
Private Sub AtualizarValor(caractereDoDigito As Char)
Dim valorDoDigito As Double = Convert.ToDouble(caractereDoDigito.ToString)
valorAtual = valorAtual * 10 + valorDoDigito
MostraNumeroNaTextBoxEmReais(valorAtual) 'chamada da função passando o parametro valorAtual
End Sub
Private Sub MostraNumeroNaTextBoxEmReais(numero As Double) ' declaração da função
ValorTextBox.Clear()
ValorTextBox.Text = " R$ " + ColocaDuasCasasDecimais(numero.ToString)
End Sub
Private Function ColocaDuasCasasDecimais(numeroEscrito As String)
Dim numeroEscritoComDuasCasasDecimais As String = ""
If numeroEscrito.Length = 1 Then
numeroEscrito = "00" + numeroEscrito
ElseIf numeroEscrito.Length = 2 Then
numeroEscrito = "0" + numeroEscrito
End If
Dim parteDecimal As String = numeroEscrito.Substring(numeroEscrito.Length - 2, 2)
Dim ParteDasCentenas As String = numeroEscrito.Substring(0, numeroEscrito.Length - 2)
numeroEscritoComDuasCasasDecimais = ParteDasCentenas + "," + parteDecimal
Return numeroEscritoComDuasCasasDecimais
End Function
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Ninguém respondeu mas eu encontrei um método aqui, porém ainda precisa ser aperfeiçoado pois não esta funcionando plenamente(vou anexa-lo no fim)

Fiz o seguinte:

Peguei o valor que estava na minha TextBox e dividi por 10, como a variável é Integer ele só removeu a parte da virgula sendo assim funciona perfeitamente

para números terminados de 0 a 4, porém quando o numero é terminado em 5+ ele é arredondado para cima ou seja 00.15 passa para 00.20 apos o backspace,

ao invés de ficar 00,01.

Alguém conhece alguma maneira de arredondar sempre para baixo?

If (Char.IsDigit(caractereApertado)) Then
AtualizarValor(caractereApertado)
UltimaTeclaApertada.Handled = True
ElseIf Char.IsControl(caractereApertado) Then
RemoveUmaCasaDecimal(caractereApertado)
UltimaTeclaApertada.Handled = True
Else
MsgBox("Digite Apenas Numeros Por Favor")
UltimaTeclaApertada.Handled = True
End If
ColocaCursorNaUltimaPosicao(ValorTextBox)
End Sub
Private Sub RemoveUmaCasaDecimal(UltimoCaractereApertado As Char)
If UltimoCaractereApertado = Chr(8) Then
valorAtual = valorAtual / 10
MostraNumeroNaTextBoxEmReais(valorAtual)
End If
End Sub
Private Sub AtualizarValor(caractereDoDigito As Char)
Dim valorDoDigito As Double = Convert.ToDouble(caractereDoDigito.ToString)
valorAtual = valorAtual * 10 + valorDoDigito
MostraNumeroNaTextBoxEmReais(valorAtual) 'chamada da função passando o parametro valorAtual
End Sub
Private Sub MostraNumeroNaTextBoxEmReais(numero As Double) ' declaração da função
ValorTextBox.Clear()
ValorTextBox.Text = " R$ " + ColocaDuasCasasDecimais(numero.ToString)
End Sub
Private Function ColocaDuasCasasDecimais(numeroEscrito As String)
Dim numeroEscritoComDuasCasasDecimais As String = ""
If numeroEscrito.Length = 1 Then
numeroEscrito = "00" + numeroEscrito
ElseIf numeroEscrito.Length = 2 Then
numeroEscrito = "0" + numeroEscrito
End If
Dim parteDecimal As String = numeroEscrito.Substring(numeroEscrito.Length - 2, 2)
Dim ParteDasCentenas As String = numeroEscrito.Substring(0, numeroEscrito.Length - 2)
numeroEscritoComDuasCasasDecimais = ParteDasCentenas + "," + parteDecimal
Return numeroEscritoComDuasCasasDecimais
End Function
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...