necesito orientación sobre programación, me ayuda alguien ?

Iniciado por PROFENIX, 23 Diciembre 2018, 22:32 PM

0 Miembros y 1 Visitante están viendo este tema.

PROFENIX

#10
me e puesto a añadir los nuevos textbox y demas cosas pero cuando e añadido lo que serian los billetes de 10 no se porque demonios no hace la operacion correspondiente.

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Inicializado As Boolean

    Private Sub txtBillete50_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBillete50.Validated, txtBillete20.Validated, txtBillete10.Validated, txtBillete5.Validated, txtMonedas2.Validated, txtMonedas1.Validated, txtMonedas050.Validated, txtMonedas020.Validated, txtMonedas010.Validated, txtMonedas005.Validated, txtMonedas002.Validated, txtMonedas001.Validated
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
        Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
        ' si admite un valor negativo, cambia al tipo short (int16)

        If UShort.TryParse(txtBillete50.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            'txtImporte50.Text ="0"
        Else
            txtImporte50.Text = (v * 50).ToString
        End If
    End Sub

    Private Sub txtBillete20_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete20.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete20.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte20.Text = (v * 20).ToString
        End If
    End Sub

    Private Sub txtBillete10_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        Dim v As UShort
        If UShort.TryParse(txtBillete10.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte10.Text = (v * 10).ToString
        End If
    End Sub

    Private Sub Totalizar() Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporte10.TextChanged
        Dim CantidadTotal As Single  ' entero de 32 bits...

        If (Inicializado = True) Then
            CantidadTotal = 0
            CantidadTotal += Single.Parse(txtImporte50.Text)
            CantidadTotal += Single.Parse(txtImporte20.Text)
            CantidadTotal += Single.Parse(txtImporte10.Text)

            txtTotal.Text = CantidadTotal.ToString
        End If
    End Sub

PROFENIX

#11
vale despues de muchos intentos y demas movidas ya lo tengo conseguido a continuacion el codigo y la aplicacion

https://www.justbeamit.com/tgk55

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Inicializado As Boolean

    Private Sub txtBillete50_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBillete50.Validated, txtBillete20.Validated, txtBillete10.Validated, txtBillete5.Validated, txtMonedas2.Validated, txtMonedas1.Validated, txtMonedas050.Validated, txtMonedas020.Validated, txtMonedas010.Validated, txtMonedas005.Validated, txtMonedas002.Validated, txtMonedas001.Validated
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
        Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
        ' si admite un valor negativo, cambia al tipo short (int16)

        If UShort.TryParse(txtBillete50.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            'txtImporte50.Text ="0"
        Else
            txtImporte50.Text = (v * 50).ToString
        End If
    End Sub

    Private Sub txtBillete20_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete20.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete20.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte20.Text = (v * 20).ToString
        End If
    End Sub

    Private Sub txtBillete10_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete10.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete10.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte10.Text = (v * 10).ToString
        End If
    End Sub

    Private Sub txtBillete5_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete5.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete5.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 5'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte5.Text = (v * 5).ToString
        End If
    End Sub

    Private Sub txtMonedas2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas2.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas2.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 2'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte2.Text = (v * 2).ToString
        End If
    End Sub

    Private Sub txtMonedas1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas1.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas1.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 1'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte1.Text = (v * 1).ToString
        End If
    End Sub

    Private Sub txtMonedas050_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas050.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas050.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte050.Text = (v * 0.5).ToString
        End If
    End Sub

    Private Sub txtMonedas020_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas020.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas020.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte020.Text = (v * 0.2).ToString
        End If
    End Sub

    Private Sub txtMonedas010_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas010.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas010.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte010.Text = (v * 0.1).ToString
        End If
    End Sub

    Private Sub txtMonedas005_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas005.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas005.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.05'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte005.Text = (v * 0.05).ToString
        End If
    End Sub

    Private Sub txtMonedas002_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas002.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas002.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.02'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte002.Text = (v * 0.02).ToString
        End If
    End Sub

    Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas001.Validating
        Dim v As Single
        If Single.TryParse(txtMonedas001.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.01'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte001.Text = (v * 0.01).ToString
        End If
    End Sub
    Private Sub Totalizar() Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporte10.TextChanged
        Dim CantidadTotal As Single  ' entero de 32 bits...

        If (Inicializado = True) Then
            CantidadTotal = 0
            CantidadTotal += Single.Parse(txtImporte50.Text)
            CantidadTotal += Single.Parse(txtImporte20.Text)
            CantidadTotal += Single.Parse(txtImporte10.Text)
            CantidadTotal += Single.Parse(txtImporte5.Text)
            CantidadTotal += Single.Parse(txtImporte2.Text)
            CantidadTotal += Single.Parse(txtImporte1.Text)
            CantidadTotal += Single.Parse(txtImporte050.Text)
            CantidadTotal += Single.Parse(txtImporte020.Text)
            CantidadTotal += Single.Parse(txtImporte010.Text)
            CantidadTotal += Single.Parse(txtImporte005.Text)
            CantidadTotal += Single.Parse(txtImporte002.Text)
            CantidadTotal += Single.Parse(txtImporte001.Text)

            txtTotal.Text = CantidadTotal.ToString
        End If
    End Sub



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Inicializado = True
    End Sub

    Private Sub txtBillete50_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete50.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete20.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete20_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete20.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete10.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete10_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete10.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete5.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete5.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas2.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas2.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas1.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas1.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas050.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas050_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas050.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas020.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas020_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas020.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas010.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas010_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas010.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas005.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas005_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas005.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas002.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas002_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas002.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas001.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas001_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas001.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtTotal1.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub Totalizar(sender As Object, e As EventArgs) Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporte10.TextChanged

    End Sub
End Class


gracias por la ayuda de verdad os los digo.

El unico problemilla que me encuentro es que el icono no se aplicar en la ventana del propio programilla, solo se aplica al ejecutable y no se el porque. pero bueno lo que queria hacer ya esta hecho, nuevamente muchas gracias

Serapis

#12
Me alegro que lo hayas podido resolver...

Sin embargo, te hago 1 observación, y es que se puede presentar un problema.
Nos olvidaremos de optimizaciones, te funciona y resulta simple de entender, así te será fácil a futuro de modificar, para ampliar, etc...


El problema que puede aparecer:
----------------------------------------
Al principio, recordarás que para billetes declaramos como tipo de datos para 'v', ushort, esto implica que al tratar de convertir el texto a ushort, rechace cosas que no son números, pero también números negativos y números decimales... perfecto.

...pero en las monedas, si intentas meter en monedas (por ejemplo de 10 centimos) "10.46" te lo aceptará, y sin embargo el número de monedas no pueda ser decimal, el número de monedas siempre debe ser un número entero...
...e igualmente rechazar también valores negativos. También se podría poner "-11" en monedas y al calcular descontaría el valor de esas monedas... pero no creo que quieras aceptar números negativos.

(prueba a poner decimales o negativos en los billetes y verás que no deja, en cambio en las monedas si deja, y no es lo que queremos)

La solución pasa por tratar cada aspecto de la forma específica, la validación por un lado con el tipo sindecimales y sin números negativos, y por otro la asignación al textbox Importe de la derecha... y se puede proceder, de diferente manera. Lo resolvemos muy fácilmente...

Recuerda que entonces, debes cambiar el contenido (solo) de los txtMonedas..._Validating de la misma forma, que trato la de 50 céntimos, aquí:
Igualmente recalco con ---!!!---  donde hay cambios, para que prestes atención en la parte que cambia.
Código (vbnet) [Seleccionar]

   Private Sub txtMonedas050_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas050.Validating
'-------------------!!!----
       Dim v As ushort
' -------- !!! -----
       If ushort.TryParse(txtMonedas050.Text, v) = False Then
           e.Cancel = True
           Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
       Else
' ------------------------------------!!!---------
           txtImporte050.Text = (0.5 * v).ToString   ' antes: (v * 0.5).ToString
       End If
   End Sub


...y definitivamente te funcionará como quieres.



mmm...veo que no has hecho todo lo que te he dicho...
En totalizar tienes que añadir los handles de todos los controles tras cuyo cambio afectan al total:
Private Sub Totalizar() Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporte10.TextChanged
Detrás de "Handles"... observa que están solo los de los billetes de 50, 20, y 10, faltan los de 5 y los de las monedas...

En cambio en Private Sub txtBillete50_TextChanged(...) y en Private Sub txtBillete50_Validated(...) si que los añadiste, luego entiendo que lo anterior es un olvido...

PROFENIX

#13
vale he hecho los cambios que me has comentado, pero te comento que he encontrado un fallo el cual no se a que se debe. imagino que habrá que programarlo también. es el hecho en que si por ejemplo en los billetes de 50 pones 4 el resultado sera 200 y en la totalización dará 200, pero cuando llegas al billete de 5 y si en un principio pones que hay 5 que serian 25 el resultado en la totalización serian 225, pero si borras los 5 porque eran 6 el resultado te lo da que serian 30 pero en la suma no se efectúa dicho cambio en la operación, no se si me explico.

esta observación la veo que pasa a partir de los billete de 5

https://www.justbeamit.com/zk7mk

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Inicializado As Boolean

    Private Sub txtBillete50_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBillete50.Validated, txtBillete20.Validated, txtBillete10.Validated, txtBillete5.Validated, txtMonedas2.Validated, txtMonedas1.Validated, txtMonedas050.Validated, txtMonedas020.Validated, txtMonedas010.Validated, txtMonedas005.Validated, txtMonedas002.Validated, txtMonedas001.Validated
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
        Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
        ' si admite un valor negativo, cambia al tipo short (int16)

        If UShort.TryParse(txtBillete50.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            'txtImporte50.Text ="0"
        Else
            txtImporte50.Text = (v * 50).ToString
        End If
    End Sub

    Private Sub txtBillete20_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete20.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete20.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte20.Text = (v * 20).ToString
        End If
    End Sub

    Private Sub txtBillete10_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete10.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete10.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte10.Text = (v * 10).ToString
        End If
    End Sub

    Private Sub txtBillete5_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete5.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete5.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 5'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte5.Text = (v * 5).ToString
        End If
    End Sub

    Private Sub txtMonedas2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas2.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas2.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 2'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte2.Text = (v * 2).ToString
        End If
    End Sub

    Private Sub txtMonedas1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas1.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas1.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 1'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte1.Text = (v * 1).ToString
        End If
    End Sub

    Private Sub txtMonedas050_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas050.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas050.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte050.Text = (0.5 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas020_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas020.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas020.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte020.Text = (0.2 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas010_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas010.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas010.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte010.Text = (0.1 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas005_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas005.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas005.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.05'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte005.Text = (0.05 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas002_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas002.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas002.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.02'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte002.Text = (0.02 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas001.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas001.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.01'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte001.Text = (0.01 * v).ToString
        End If
    End Sub
    Private Sub Totalizar() Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
        Dim CantidadTotal As Single  ' entero de 32 bits...

        If (Inicializado = True) Then
            CantidadTotal = 0
            CantidadTotal += Single.Parse(txtImporte50.Text)
            CantidadTotal += Single.Parse(txtImporte20.Text)
            CantidadTotal += Single.Parse(txtImporte10.Text)
            CantidadTotal += Single.Parse(txtImporte5.Text)
            CantidadTotal += Single.Parse(txtImporte2.Text)
            CantidadTotal += Single.Parse(txtImporte1.Text)
            CantidadTotal += Single.Parse(txtImporte050.Text)
            CantidadTotal += Single.Parse(txtImporte020.Text)
            CantidadTotal += Single.Parse(txtImporte010.Text)
            CantidadTotal += Single.Parse(txtImporte005.Text)
            CantidadTotal += Single.Parse(txtImporte002.Text)
            CantidadTotal += Single.Parse(txtImporte001.Text)

            txtTotal.Text = CantidadTotal.ToString
        End If
    End Sub



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Inicializado = True
    End Sub

    Private Sub txtBillete50_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete50.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete20.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete20_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete20.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete10.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete10_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete10.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete5.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete5.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas2.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas2.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas1.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas1.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas050.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas050_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas050.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas020.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas020_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas020.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas010.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas010_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas010.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas005.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas005_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas005.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas002.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas002_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas002.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas001.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas001_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas001.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtTotal1.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub Totalizar(sender As Object, e As EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged

    End Sub

End Class

Serapis

Cita de: PROFENIX en 26 Diciembre 2018, 22:20 PM
vale he hecho los cambios que me has comentado, pero te comento que he encontrado un fallo el cual no se a que se debe. imagino que habrá que programarlo también. es el hecho en que si por ejemplo en los billetes de 50 pones 4 el resultado sera 200 y en la totalización dará 200, pero cuando llegas al billete de 5 y si en un principio pones que hay 5 que serian 25 el resultado en la totalización serian 225, pero si borras los 5 porque eran 6 el resultado te lo da que serian 30 pero en la suma no se efectúa dicho cambio en la operación, no se si me explico.

esta observación la veo que pasa a partir de los billete de 5


Código (vbnet) [Seleccionar]
Public Class Form1

   '.... código previo omitido.

   Private Sub Totalizar() Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
       Dim CantidadTotal As Single  ' entero de 32 bits...

       If (Inicializado = True) Then
           CantidadTotal = 0
           CantidadTotal += Single.Parse(txtImporte50.Text)
           CantidadTotal += Single.Parse(txtImporte20.Text)
           CantidadTotal += Single.Parse(txtImporte10.Text)
           CantidadTotal += Single.Parse(txtImporte5.Text)
           CantidadTotal += Single.Parse(txtImporte2.Text)
           CantidadTotal += Single.Parse(txtImporte1.Text)
           CantidadTotal += Single.Parse(txtImporte050.Text)
           CantidadTotal += Single.Parse(txtImporte020.Text)
           CantidadTotal += Single.Parse(txtImporte010.Text)
           CantidadTotal += Single.Parse(txtImporte005.Text)
           CantidadTotal += Single.Parse(txtImporte002.Text)
           CantidadTotal += Single.Parse(txtImporte001.Text)

           txtTotal.Text = CantidadTotal.ToString
       End If
   End Sub

'... código intermedio omitido.


   Private Sub Totalizar(sender As Object, e As EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged

   End Sub

End Class

De entrada tienes repetida la función... borra esta segunda que tienes al final del código

Tu problema es que no te ciñes a lo que te dije aqúi:

CitarNota también que cuando añades el handles, se indica el objeto (control) y el evento correcto... cualquier equivocación en el objeto o en evento, puede producir resutados inesperados, erróneos, o inexactos, impredecibles... a saber...

Fíjate que en esta rutina los eventos a enganchar, son los de cambio de los textbox de IMPORTE (mira el código que te pasé como si lo tienen así, te lo pongo aquídebajo), y  NO el de los textbox de las CANTIDADES, que has puesto (mira tu rutina más arriba).

Código (vbnet) [Seleccionar]

'------------------------------------------ !!!! ------------ !!! ----
   Private Sub Totalizar() Handles TxtImporte001.TextChanged, txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporteX5.TextChanged
       ' -------------------------!!!---
       Dim CantidadTotal As Single   ' entero de 32 bits...

       If (Inicializado = True) Then
           ' ---------------------!!!-----
           CantidadTotal = Single.Parse(txtImporte50.Text)
           CantidadTotal += Single.Parse(txtImporte20.Text)

           CantidadTotal += Single.Parse(txtImporteX5.Text)

           ' ---!!! -------------------------------!!!------
           CantidadTotal += Single.Parse(TxtImporte001.Text)

           txtTotal.Text = CantidadTotal.ToString
       End If
   End Sub


Es decir, lo correcto es esto:
    Private Sub Totalizar() Handles TxtImporte50.TextChanged, ...
y no esto que has puesto:
     Private Sub Totalizar() Handles txtBillete50.TextChanged, ...

PROFENIX

perdona no es que no me ciña a lo que me digas, es que no me di cuenta. cada vez que me dices que tengo que cambiar algo me voy fijando pero hay cosas que en el primer momento se me escapa no se porque pero lo veo igual y pienso joe pues no se donde esta la diferencia. sigo cambiando cosas y pruebo los cambios y digo esto tira, y pienso sera que hay no tenia que fijarme y yo lo e entendido mal.

bueno creo que ya esta todos los cambios aplicados

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Inicializado As Boolean

    Private Sub txtBillete50_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete10.TextChanged, txtBillete5.TextChanged, txtMonedas2.TextChanged, txtMonedas1.TextChanged, txtMonedas050.TextChanged, txtMonedas020.TextChanged, txtMonedas010.TextChanged, txtMonedas005.TextChanged, txtMonedas002.TextChanged, txtMonedas001.TextChanged
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBillete50.Validated, txtBillete20.Validated, txtBillete10.Validated, txtBillete5.Validated, txtMonedas2.Validated, txtMonedas1.Validated, txtMonedas050.Validated, txtMonedas020.Validated, txtMonedas010.Validated, txtMonedas005.Validated, txtMonedas002.Validated, txtMonedas001.Validated
        sender.backcolor = Color.White
        txtTotal.Visible = True
    End Sub

    Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
        Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
        ' si admite un valor negativo, cambia al tipo short (int16)

        If UShort.TryParse(txtBillete50.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            'txtImporte50.Text ="0"
        Else
            txtImporte50.Text = (v * 50).ToString
        End If
    End Sub

    Private Sub txtBillete20_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete20.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete20.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte20.Text = (v * 20).ToString
        End If
    End Sub

    Private Sub txtBillete10_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete10.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete10.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte10.Text = (v * 10).ToString
        End If
    End Sub

    Private Sub txtBillete5_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete5.Validating
        Dim v As UShort
        If UShort.TryParse(txtBillete5.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 5'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte5.Text = (v * 5).ToString
        End If
    End Sub

    Private Sub txtMonedas2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas2.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas2.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 2'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte2.Text = (v * 2).ToString
        End If
    End Sub

    Private Sub txtMonedas1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas1.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas1.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 1'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte1.Text = (v * 1).ToString
        End If
    End Sub

    Private Sub txtMonedas050_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas050.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas050.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte050.Text = (0.5 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas020_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas020.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas020.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte020.Text = (0.2 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas010_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas010.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas010.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.10'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte010.Text = (0.1 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas005_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas005.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas005.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.05'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte005.Text = (0.05 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas002_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas002.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas002.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.02'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte002.Text = (0.02 * v).ToString
        End If
    End Sub

    Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtMonedas001.Validating
        Dim v As UShort
        If UShort.TryParse(txtMonedas001.Text, v) = False Then
            e.Cancel = True
            Call MessageBox.Show("No puede tomarse como un numero el valor para 'monedas de 0.01'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        Else
            txtImporte001.Text = (0.01 * v).ToString
        End If
    End Sub
    Private Sub Totalizar() Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporte10.TextChanged, txtImporte5.TextChanged, txtImporte2.TextChanged, txtImporte1.TextChanged, txtImporte050.TextChanged, txtImporte020.TextChanged, txtImporte010.TextChanged, txtImporte005.TextChanged, txtImporte002.TextChanged, txtImporte001.TextChanged
        Dim CantidadTotal As Single  ' entero de 32 bits...

        If (Inicializado = True) Then
            CantidadTotal = 0
            CantidadTotal += Single.Parse(txtImporte50.Text)
            CantidadTotal += Single.Parse(txtImporte20.Text)
            CantidadTotal += Single.Parse(txtImporte10.Text)
            CantidadTotal += Single.Parse(txtImporte5.Text)
            CantidadTotal += Single.Parse(txtImporte2.Text)
            CantidadTotal += Single.Parse(txtImporte1.Text)
            CantidadTotal += Single.Parse(txtImporte050.Text)
            CantidadTotal += Single.Parse(txtImporte020.Text)
            CantidadTotal += Single.Parse(txtImporte010.Text)
            CantidadTotal += Single.Parse(txtImporte005.Text)
            CantidadTotal += Single.Parse(txtImporte002.Text)
            CantidadTotal += Single.Parse(txtImporte001.Text)

            txtTotal.Text = CantidadTotal.ToString
        End If
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Inicializado = True
    End Sub

    Private Sub txtBillete50_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete50.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete20.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete20_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete20.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete10.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete10_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete10.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtBillete5.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtBillete5_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtBillete5.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas2.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas2.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas1.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas1.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas050.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas050_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas050.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas020.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas020_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas020.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas010.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas010_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas010.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas005.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas005_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas005.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas002.Focus()
            e.Handled = True
        End If
    End Sub

    Private Sub txtMonedas002_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas002.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtMonedas001.Focus()
            e.Handled = True
        End If
    End Sub
    Private Sub txtMonedas001_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtMonedas001.KeyPress
        If Asc(e.KeyChar) = 13 Then
            txtTotal1.Focus()
            e.Handled = True
        End If
    End Sub

End Class

Serapis

#16
Bien, pués ahora que parece que ya te funciona todo bien, vamos a hacer una optimización de reducción de código...

La rutina validating... Si te fijas bien, hay una por cada billete y moneda, pero el código que hacen es siempre el mismo... entonces vamos a parametrizar las diferencias para reunirlas en una sola función, y desde todas ellas invocar a esa.

Primero creamos la función que hará el trabajo de todas, y luego vemos de modificar una a modo de ejemplo pero que se aplica a todas (cambiando las diferencias):
Código (vbnet) [Seleccionar]

   Private Sub ValidandoBiletesyMonedas(ByVal Valor As String, ByVal TxtDestino As TextBox, ByVal FactorConv As Single, ByVal TextoMsg As String, ByVal e As System.ComponentModel.CancelEventArgs)
       Dim v As UShort

       If UShort.TryParse(Valor, v) = False Then
           e.Cancel = True
           Call MessageBox.Show("No puede tomarse como un número el valor para" & TextoMsg, "Error: No es un número (entero y positivo).", MessageBoxButtons.OK, MessageBoxIcon.Warning)
       Else
           TxtDestino.Text = (FactorConv * v).ToString
       End If
   End Sub


Como ves la rutina hace exactamente lo mismo que hemos venido haciendo en cada una, solo que está es 'universal' para todas ellas... Puede ser llamada desde todas las otras que tienen ese código, con una sola línea en aquellas llamando a esta, con los valores adecuados en sus parámetros...

Ahora te pongo, como se ha cambiado una de ellas, para que de modo similar, apliques el cambio a todas, fijándote bien en los valores que pones en la llamada a esta función recién redactada...
De ejemplo tomamos la de 1 céntimo... nota que dejo comentado el código previo que tenía... te sirve para verificar que los datos que pasas a la función son los mismos que ahí tienes, cuando funciones bien, puedes eliminarlo y estarás eliminando unas 100 líneas de código de un plumazo.
Código (vbnet) [Seleccionar]

Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TxtBillete001.Validating
       ' sender se refiere siempre al objeto que lo llama, aquí txtMonedas001, poner sender.text es casi lo mismo que poner txtMonedas001.text
       Call ValidandoBiletesyMonedas(sender.text, TxtImporte001, 0.1, " 'monedas de 1 céntimo'.", e)
       'Dim v As UShort 'Single 'UShort
       'If UShort.TryParse(txtMonedas001.Text, v) = False Then
       '    e.Cancel = True
       '    Call MessageBox.Show("No puede tomarse como un número el valor para 'monedas de 1 céntimo'.", "Error: No es un número.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
       'Else
       '    TxtImporte001.Text = (0.1 * v).ToString
       'End If
   End Sub


Cuando compruebes que te funcionen bien (porque no equivocaste los valores que se pasan a la función), puedes eliminar el código comentado en cada función, y mira como queda reducido:
Código (vbnet) [Seleccionar]

Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TxtBillete001.Validating
       Call ValidandoBiletesyMonedas(sender.text, TxtImporte001, 0.1, " 'monedas de 1 céntimo'.", e)
   End Sub




p.d.: Cuando hagas esa optimización y te salga bien... sin errores (si quieres, por supuesto), todavía volveremos a optimizarlo más, no solo esa, también las de KeyPress... para que sean remplazas todas por solo 2 funciones en cada caso.

PROFENIX

#17
lo que me comentas que deberia de cambiar para optimizar seria esta parte del codigo ?

Código (vbnet) [Seleccionar]
Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
       Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
       ' si admite un valor negativo, cambia al tipo short (int16)

       If UShort.TryParse(txtBillete50.Text, v) = False Then
           e.Cancel = True
           Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
           'txtImporte50.Text ="0"
       Else
           txtImporte50.Text = (v * 50).ToString
       End If
   End Sub


y si es asi te refieres que elimine todos esos codigo y lo sustituya por el que me comentas aqui, pero claro poniendo los nombres de los billetes y monedas que corresponde en cada uno.

Código (vbnet) [Seleccionar]
Private Sub txtMonedas001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TxtBillete001.Validating
       Call ValidandoBiletesyMonedas(sender.text, TxtImporte001, 0.1, " 'monedas de 1 céntimo'.", e)
   End Sub


es que esta parte es la que no llego a comprender bien del todo, la verdad y no se si te estas refiriendo a eso o a otra cosa.

P.D. me traido el programita al pc donde se ejecutara para probarlo, y no e tenido una cosa en cuenta no se si sera una metedura de pata muy grande y tendre que comenzar desde 0 o si por el contrario seria una tonteria, el caso es que no lo e pidido ejecutar porque este pc trabaja con windows 2000 de 32 bits y el programita el exe compilado es de 64 bits.

Hay forma sencilla de arreglar eso o tendre que empezar desde 0?

Serapis

#18
Citar...y si es asi te refieres que elimine todos esos codigo y lo sustituya por el que me comentas aqui, pero claro poniendo los nombres de los billetes y monedas que corresponde en cada uno...
Exacto, si...

Citarporque este pc trabaja con windows 2000 de 32 bits y el programita el exe compilado es de 64 bits.
Si el ordenador destino ha de ser fijo un windows 2000, hay que rehacerlo en vb6...
No obstante, no elimines el programa... si tarde o temprano, tienes que usarlo en un equipo más actual, pués ya lo tienes.

CitarHay forma sencilla de arreglar eso o tendre que empezar desde 0?
No. Son tecnologías distintas. En windows 2000 incluso es muy probable que no admita ningún framework más actual que el 1.1 o 2.0 de NET (no estoy seguro, habría que mirarlo).
Ya en el XP, la versión superior que admite es el NET 3.5

En fin, básicamente se puede rehacer con VB6, con cambios eso sí... La cuestión es si tienes un IDE de VB6...


PROFENIX

#19
Cita de: NEBIRE en 29 Diciembre 2018, 00:43 AM
Exacto, si...
Si el ordenador destino ha de ser fijo un windows 2000, hay que rehacerlo en vb6...
No obstante, no elimines el programa... si tarde o temprano, tienes que usarlo en un equipo más actual, pués ya lo tienes.
No. Son tecnologías distintas. En windows 2000 incluso es muy probable que no admita ningún framework más actual que el 1.1 o 2.0 de NET (no estoy seguro, habría que mirarlo).
Ya en el XP, la versión superior que admite es el NET 3.5

En fin, básicamente se puede rehacer con VB6, con cambios eso sí... La cuestión es si tienes un IDE de VB6...



lo he compilado en x86 y con la versión framework.net 2.0 que es la mas baja que me permite el visual studio que yo tengo, lo probare hoy. con los resultados que obtenga te lo comentare.

después de intentar ejecutarlo me salta este error



habrá que hacerlo en visual basic finalmente ?

P.D. quiero recordar que ese ordenador no puedo instalar nada. me refiero a si me dices a mira eso instalas tal libreria de dll o lo que sea y se te soluciona. no puedo porque es el ordenador donde yo trabajo y no quiero joderla con los programas que ya maneja el propio ordenador, solo por la cosa de tener este mini programita de calculo.