Jump to content
Fórum Script Brasil
  • 0

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


Question

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 to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148906
    • Total Posts
      644997
×
×
  • Create New...