none
Como ir sumando un textbox con el nuevo valor del mismo textbox RRS feed

  • Pregunta

  • Bueno parece complicado explicar o suena raro el titulo:

    Estoy haciendo algo para cabinas de internet si alquilo 30min le doy click al boton iniciar y el cronometro empieza y el importe aparece como 0.75, llegando a los 30min pregunta desea mas tiempo? si es no bien alli, pero si es sí entonces elijo el tiempo y digo 1hr = 60min entonces el importe va ser 1.50

    Como entonces hago para que esos importes se vayan adicionando es decir si antes era 0.75 entonces va ser ese textbox 0.75+1.5 = 2.25

    Ahora otro punto mas si ese combo box tiene valores numericos como le pongo hora libre?

    Gracias

    viernes, 3 de noviembre de 2017 2:34

Respuestas

  • Buenas

    supongo que te refieres al codigo que te puso Javi:

    Valor = GetDouble(Label1.Text)   
    Valor += 1.5

    por el contexto, dado que GetDouble devuele un double, te diría que la variable valor es "Double".

    De todos modos, ya que vas a trabajar con "moneda", te recomendaría que usaras un variable de tipo Decimal, ya que es un tipo exacto, mientras que double y float son inexactas (por como funciona el framework, puedes perder algún decimal lejano que te cambie un poco el numero por redondeo)

    Para eso, solo tienes que declarar valor como decimal, y cambiar el codigo de Javi por este:

    Public Function GetDecimal(ByVal doublestring As String) As Decimal
        Dim retval As Decimal
        Dim sep As String = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
        Decimal.TryParse(Replace(Replace(doublestring, ".", sep), ",", sep), retval)
        Return retval
    End Function

    y para sumarlo

    Valor = GetDecimal(Label1.Text)   
    Valor += 1.5

    La variable valor, sea como decimal o como double, tienes que declararla a nivel de formulario.

    Si tienes dudas nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    martes, 7 de noviembre de 2017 14:04

Todas las respuestas

  • Si el valor del importe lo presenta la aplicación y no es un dato que tenga que introducir o modificar el usuario no debes ponerlo en un textbox. Utiliza un label.

    Si quieres ir sumando un cierto valor al que tenga el label puedes usar la función

    Public Function GetDouble(ByVal doublestring As String) As Double
        Dim retval As Double
        Dim sep As String = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
        Double.TryParse(Replace(Replace(doublestring, ".", sep), ",", sep), retval)
        Return retval
    End Function

    De esta forma:

    Valor = GetDouble(Label1.Text)   ' Obtienes el valor presentado en el label es ese momento
    Valor += 1.5   ' Aquí le sumas el importe que quieras

    Label1.Text = Valor   ' Actualizas el valor del label


    Saludos, Javier J

    • Propuesto como respuesta Jorge TurradoMVP viernes, 3 de noviembre de 2017 12:46
    viernes, 3 de noviembre de 2017 11:35
  • De echo el importe es un label no ingreso nada, respecto a culture.info y valor sale error

    solo debo agregar? Imports System.Globalization

    • Editado Javier Roque viernes, 3 de noviembre de 2017 13:55
    viernes, 3 de noviembre de 2017 13:53
  • Buenas,

    Para poder usar CultureInfo, tienes que importar el namespace System.Globalization

    Imports System.Globalization
    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    viernes, 3 de noviembre de 2017 13:57
  • ya e probado el codigo pero no, esta casi por alli pero no lo hace, cuando me pregunta desea mas tiempo le digo si!! entonces automaticamente este se suma si antes era 0.50 lo que haces es ponerse a 1 pero porque? si yo aun no escogido el tiempo.

    Esto se ve asi

    Para el ejemplo tomo 1min de alquiler cuando el cronometro llega a 00:01:00 me pregunta desea mas tiempo? le digo si, voy al combo y elijo el tiempo entonces alli recien debe sumar el nuevo valor.

    Si 1min equivale a 0.5 y 2 min a 1.0 (suponiendo precios para el ejemplo)

    Entonces 1min = 0.50 desea mas tiempo? digo si tu codigo me suma 0.5 +0.5 =1 pero ese 0.5 no debe sumarse sin haber escodgido el nuevo tiempo

    Seria asi:

    1min = 0.50 desea mas tiempo ? si nuevo tiempo 2min= 1.00 entonces ira sumando 0.5 + 1.0= 1.50

    viernes, 3 de noviembre de 2017 14:32
  • Buenas,

    Dependerá de tu proceso el cuando se sume o no se sume, entiendo que Javier te ha mostrado como hacerlo.

    Si lo que quieres es que se sume cuando se seleccione un valor en el comboBox, lo suyo seria llamarle en el evento SelectedIndexChanged del propio combobox, si encambio quieres que se aplique cuando se acepta mediante un boton, tendras que llamarle en OnClick del boton, esa función que te ha puesto solo vale para obtener el valor numérico de un texto, no indica cuando hay que usarla.

    Por lo que entiendo, tu proceso tiene algún tipo de timer, que cuando la cuenta es menor que 1 minuto, abre un formulario y enseña un combobox, supongo que el usuario selecciona un item del combobox, y entonces pulsa aceptar. Es asi? si es asi, el codigo tienes que ponerlo en el OnClick del boton de aceptar

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    viernes, 3 de noviembre de 2017 15:07
  • si esta controlado por un timer, el caso es asi.

    uso ambos combo y boton

    cuando elijo el tiempo de 1min a + para no esperar las pruebas mucho elijo 2min entonces 0.5 +1.0 = 1.5 el boton lo uso al final cuando ya no requiero mas tiempo entonces le doy click a calcular y me suma Importe mas consumo el consumo es otra cosas ventas del dia aparte. eso no hay problema el tema es si digo si quiero mas tiempo

    es como una suma interna o temporal

    viernes, 3 de noviembre de 2017 16:04
  • Buenas Javier,

    Lo siento, pero no acabo de entender que es lo que quieres hacer, o más bien que es lo que quieres que nosotros te respondamos, déjanos ver tu código para que podamos ayudarte en tu caso concreto, puesto que lo que necesitas no es solo lo que has preguntado al inicio (lo cual esta respondido ya por Javier Jiménez,puesto que su código funciona perfectamente), sino que necesitas que te hechos una mano con el control de flujo de tu proyecto.

    Explícanos detenidamente que quieres que haga tu programa (puedes echar un ojo a Ayudanos a ayudarte si necesitas ayuda sobre como hacerlo), lo que yo entiendo, es que cuando en tu timer se cumple una condición, vas a mostrar un formulario (corrigeme si no muestras un formulario), el cual va a tener un label, un combobox y un boton, cuando seleccionas un item del combobox, que va ha hacer? que va a hacer cuando pulsas en el boton?

    Por lo que entiendo de tu respuesta anterior, quieres que se vaya acumulando algo, que es lo que se acumula?

    Quedo a la espera de información

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    viernes, 3 de noviembre de 2017 16:31
  • Mediante la grafica explicare el problema de todas mis consultas

    Como veran yo digo necesito 30min de alquiler me dice la hora final el cronometro va corriendo y el importe del los 30min es 0.75 cuando este llega a los 30 min cronometrados me saldra un mensaje desea alquilar mas tiempo? si es no ok se calcula todo y normal.

    si es Si; aqui el problema

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
            mostrar_tiempo()
            If cboCantidadPc01.SelectedIndex = -1 Then Exit Sub
            If minuto = cboCantidadPc01.Text Then
                Timer1.Stop()
                Dim ruta As String
                ruta = My.Application.Info.DirectoryPath
                Dim musica As System.Media.SoundPlayer
                musica = New System.Media.SoundPlayer(ruta + "\Alarm.wav")
                musica.Play()
    
                Dim msm As New MsgBoxResult
                msm = MsgBox("Desea aumentar mas tiempo?", MsgBoxStyle.YesNo, "Advertencia")
                If msm = MsgBoxResult.Yes Then
    
                    
                    Iniciar01.Enabled = True
    
                Else
                    Timer1.Stop()
                    Timer1.Enabled = False
                    horas = 0
                    minuto = 0
                    segundo = 0
                    lblCronometroPC01.Text = "00:00:00"
                    lblCronometroPC01.Text = ""
                    lblEstadoPC01.Text = ""
    
                    Total01.Enabled = True
                End If
            End If
        End Sub

    Entonces si es SI yo elegiré quizás 30 minutos mas o 15 min o el caso que fuera. Entonces cuando termine el momento que ya no quiera alquilar el importe debera ir acumulando los costos de tiempo y sumandolos de forma interna, si inicialmente pedi 30min equivalente a 0.75 y luego alquile 30min mas quiere decir que el importe sera 1.50 y si solo luego quiero 15min mas y este equivaliera a 0.30 entonces el resultado final sera 1.50+0.30 = 1.80 cuando ya no desee alquilar mas y obtenga operacion el valor final de alquiler va ser 1.80.

    Espero me haya dejado entender.

    Gracias

    viernes, 3 de noviembre de 2017 17:06
  • Vale,

    Mas o menos lo he entendido, para lo que quieres hacer, puedes crear una variable a nivel de formulario, de modo que almacenes ahi el coste que se ha ido sumando. Me explico:

    1. Tienes una variable de tipo decimal a nivel de formulario, cuando entra un nuevo usuario, la pones a 0
    2. El usuario elige una opcion de tiempo
    3. En el momento en el que sumas el tiempo al contador, sumas el coste a la variable que has declarado a nivel de formulario
    4. Cuando el usuario deja el equipo, coges el valor de la variable miembro (del formulario) y lo muestras por donde necesitas

    Seria posible hacerlo asi? digo porque creo que es la manera más facil que vas a tener

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    viernes, 3 de noviembre de 2017 19:37
  • Hola estoy volviendo analizar tu codigo y Valor ? declarado como? double decimal int?

    martes, 7 de noviembre de 2017 13:39
  • Hay un tema yo no le agrego valores, y cada ves que lo sumo se duplica es decir si el valor es 2.5 hace 2.5+2.5 =5 pero el valor depende de lo que el cliente consume si es una gaseosa de precio 2 o 2.5 varia y luego consume algo de sal una galleta 0.50 entonces 2+0.5 =2.5 

    martes, 7 de noviembre de 2017 13:58
  • Buenas

    supongo que te refieres al codigo que te puso Javi:

    Valor = GetDouble(Label1.Text)   
    Valor += 1.5

    por el contexto, dado que GetDouble devuele un double, te diría que la variable valor es "Double".

    De todos modos, ya que vas a trabajar con "moneda", te recomendaría que usaras un variable de tipo Decimal, ya que es un tipo exacto, mientras que double y float son inexactas (por como funciona el framework, puedes perder algún decimal lejano que te cambie un poco el numero por redondeo)

    Para eso, solo tienes que declarar valor como decimal, y cambiar el codigo de Javi por este:

    Public Function GetDecimal(ByVal doublestring As String) As Decimal
        Dim retval As Decimal
        Dim sep As String = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
        Decimal.TryParse(Replace(Replace(doublestring, ".", sep), ",", sep), retval)
        Return retval
    End Function

    y para sumarlo

    Valor = GetDecimal(Label1.Text)   
    Valor += 1.5

    La variable valor, sea como decimal o como double, tienes que declararla a nivel de formulario.

    Si tienes dudas nos comentas

    Atte


    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:


    martes, 7 de noviembre de 2017 14:04