Autor
|
Tema: necesito orientación sobre programación, me ayuda alguien ? (Leído 9,184 veces)
|
PROFENIX
Desconectado
Mensajes: 18
|
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. 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
|
|
« Última modificación: 25 Diciembre 2018, 22:08 pm por PROFENIX »
|
En línea
|
|
|
|
PROFENIX
Desconectado
Mensajes: 18
|
vale despues de muchos intentos y demas movidas ya lo tengo conseguido a continuacion el codigo y la aplicacion https://www.justbeamit.com/tgk55Public 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
|
|
« Última modificación: 25 Diciembre 2018, 23:46 pm por PROFENIX »
|
En línea
|
|
|
|
Serapis
|
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. 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...
|
|
« Última modificación: 26 Diciembre 2018, 01:11 am por NEBIRE »
|
En línea
|
|
|
|
PROFENIX
Desconectado
Mensajes: 18
|
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/zk7mkPublic 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
|
|
« Última modificación: 26 Diciembre 2018, 22:37 pm por PROFENIX »
|
En línea
|
|
|
|
Serapis
|
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 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: Nota 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). '------------------------------------------ !!!! ------------ !!! ---- 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, ...
|
|
|
En línea
|
|
|
|
PROFENIX
Desconectado
Mensajes: 18
|
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 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
|
|
|
En línea
|
|
|
|
Serapis
|
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): 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. 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: 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.
|
|
« Última modificación: 27 Diciembre 2018, 15:14 pm por NEBIRE »
|
En línea
|
|
|
|
PROFENIX
Desconectado
Mensajes: 18
|
lo que me comentas que deberia de cambiar para optimizar seria esta parte del codigo ? 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. 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?
|
|
« Última modificación: 28 Diciembre 2018, 10:11 am por PROFENIX »
|
En línea
|
|
|
|
Serapis
|
...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... porque 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. Hay 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...
|
|
« Última modificación: 29 Diciembre 2018, 00:45 am por NEBIRE »
|
En línea
|
|
|
|
PROFENIX
Desconectado
Mensajes: 18
|
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.
|
|
« Última modificación: 29 Diciembre 2018, 15:42 pm por PROFENIX »
|
En línea
|
|
|
|
|
|