Rincón Matemático

Disciplinas relacionadas y temas generales => Computación e Informática => Mensaje iniciado por: hfarias en 16 Noviembre, 2017, 10:39 pm

Título: Sumar Valores desde Combobox a Textbox
Publicado por: hfarias en 16 Noviembre, 2017, 10:39 pm
Estimados deseo si me pueden aclarar cual es el error que hay en el Código que hice, ya que quiero Sumar  los Valores que inserte en un Combobox y que su resultado aparesca en TextBox,por medio de un Command Button en Visual Basic Net.

También pregunto como se hace para eliminar una consulta que hice y que pude  resolverla.
Esto es para que no siga estando en la lista de espera de respuesta.

Gracias y acompaño dos  archivos con  Imagenes.jgp
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: manooooh en 16 Noviembre, 2017, 11:42 pm
Hola,

Spoiler
Estimados deseo si me pueden aclarar cual es el error que hay en el Código que hice, ya que quiero Sumar  los Valores que inserte en un Combobox y que su resultado aparesca en TextBox,por medio de un Command Button en Visual Basic Net.

También pregunto como se hace para eliminar una consulta que hice y que pude  resolverla.
Esto es para que no siga estando en la lista de espera de respuesta.

Gracias y acompaño dos  archivos con  Imagenes.jgp
[cerrar]

Copio el código que escribiste:

Código: [Seleccionar]
Public Class Form1

    Private Sub Button1_Click(...) Handles Button1.Click
        Dim Suma As Integer
        If IsNumeric(ComboBox1.Text) Then
            suma = CDbl(ComboBox1.Text)
        End If

        Suma = Val(ComboBox1.Text)
        txtResultado.Text = suma
    End Sub
End Class


Hay un par de errores que son de comprensión nada más. Veamos.

Código: [Seleccionar]
Private Sub Button1_Click(...) Handles Button1.Click
        Dim Suma As Integer
        (...)
End Sub
En primer lugar declarás la variable "Suma" (obs.: por una cuestión de notación las variables comienzan con minúscula) dentro del ámbito privado, que en este caso es al hacer click en Button1... Esto significa que cada vez que corramos ese código se va a declarar la variable una y otra vez... Debés ponerlo en el ámbito público, esto es debajo del Public Class Form1 para que quede ya declarada y no se inicialice siempre en 0 (porque la re-declarás siempre).



Código: [Seleccionar]
Suma = Val(ComboBox1.Text)

Debajo de preguntar si el texto del ComboBox1 contiene números, escribís esta línea. Lo que estás haciendo ahí es ¡reemplazar lo que calculaste dentro del If! No se lo estás sumando, porque justamente lo estás "igualando" otra vez... deberíamos sacar esa línea de código porque es innecesaria.


Código: [Seleccionar]
If IsNumeric(ComboBox1.Text) Then
        Suma = CDbl(ComboBox1.Text)
End If

Imaginate que ingresás los valores 6 y 4. En primer lugar son numéricos, por lo que la condición será verdadera. Ahí Suma = 6, ¿correcto? Ahora suponete que volvés a clickear, pero esta vez ingresás el valor 4... Suma debería ser 10. Sin embargo, Suma = 4. ¿Por qué? Porque Suma no está cumpliendo la función de ser acumulador. Es el mismo error que te marqué antes; para esto, debemos acumular todos los valores ingresados, por lo que el código dentro del If debería quedar:
Código: [Seleccionar]
Suma = Suma + CDbl(ComboBox1.Text)De todas maneras, la función Cdbl no es necesaria porque ¡sabés que ComboBox1.Text es numérica! Además como Suma es entero, creo que CDbl es para expresiones de tipo Double... por lo que es innecesaria. Así, debería quedar
Código: [Seleccionar]
Suma = Suma + ComboBox1.Text
Nota: existe un atajo para no repetir dos veces una misma variable cuando queremos sumarla/restarla/dividirla/etc. a otra variable. Se usa += / -= / /= / etc. Así quedaría más simple:
Código: [Seleccionar]
Suma += ComboBox1.Text




En definitiva el código bien queda:

Código: [Seleccionar]
Public Class Form1
    Dim Suma As Double
    Private Sub Button1_Click(...) Handles Button1.Click
        If IsNumeric(ComboBox1.Text) Then
            Suma += ComboBox1.Text
        End If

        txtResultado.Text = Suma
    End Sub
End Class



Cualquier duda preguntá.

Saludos
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: hfarias en 17 Noviembre, 2017, 03:07 am
Estimado manooooh gracias por tu respuesta la entendi,ahora pregunto ¿Si tuviera cuatro Combobox con datos numericos y quiero sumar los valores de los cuatro y que me de la suma total   de los mismos?.

Cómo los declaro,porque siguiendo el orden del código que enviaste para un solo Combo quedaria   :

Suma += ComboBox1.text + ComboBox2.text  + ComboBox3.text  + ComboBox4.text  ,para los cuatro Combos. (El Valor total de la suma delos cuatro combos)

O deberia declarar una variable que me de el valor Total de la Suma de los cuatro Combos.

Pregunto esto porque no es facil encontrar en la web ejercicios de ste tipo,por lo menos yo no los encuentro.

Gracias nuevamente.                                                                                                                                                        d
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: manooooh en 17 Noviembre, 2017, 03:33 am
Hola,

Estimado manooooh gracias por tu respuesta la entendi,ahora pregunto ¿Si tuviera cuatro Combobox con datos numericos y quiero sumar los valores de los cuatro y que me de la suma total   de los mismos?.

Cómo los declaro,porque siguiendo el orden del código que enviaste para un solo Combo quedaria   :

Suma += ComboBox1.text + ComboBox2.text  + ComboBox3.text  + ComboBox4.text  ,para los cuatro Combos. (El Valor total de la suma delos cuatro combos)

O deberia declarar una variable que me de el valor Total de la Suma de los cuatro Combos.

Pregunto esto porque no es facil encontrar en la web ejercicios de ste tipo,por lo menos yo no los encuentro.

Gracias nuevamente.                                                                                                                                                        d

Depende cómo tengas que manipular las sumas. Si querés podés sumar en la misma variable todos los valores de los ComboBox, pero si te pidiesen hacer algo con, por ejemplo, la suma de los valores del ComboBox3 no tendrías forma de saberlo, pues tendrás la suma de todos los ComboBox. Para esto declarás 4 variables y mostrás la suma en txtResultado.Text, o bien las sumas las guardás en una variable SumaTotal y la mostrás en txtResultado.Text.

Siguiendo con el caso de sumar todos los valores, ahora tenemos 4 ComboBox que sumar. Lo que queremos hacer entonces es hacer lo que vos escribiste, o sea
Código: [Seleccionar]
Suma += ComboBox1.Text + ComboBox2.Text + ComboBox3.Text + ComboBox4.Text
Sin embargo, hay algo que nos está faltando... ¿Qué ocurre si ComboBox3.Text = "Esto es texto"? No debería sumar... por lo que también tenemos que modificar la condición. Para que funcione con todos y cada uno, usaremos la palabra And:
Código: [Seleccionar]
If IsNumeric(ComboBox1.Text) And IsNumeric(ComboBox2.Text) And IsNumeric(ComboBox3.Text) And IsNumeric(ComboBox4.Text) Then
            Suma += ComboBox1.Text + ComboBox2.Text + ComboBox3.Text + ComboBox4.Text
End If

Y luego mostrás Suma en el txtResultado. Hasta ahí serían las modificaciones...

IMPORTANTE: si lo probás vas a ver que los números no se suman, sino que se "unen". Es decir, con este código:
Código: [Seleccionar]
Public Class Form1
    Dim Suma As Double
    Private Sub Button1_Click(...) Handles Button1.Click
        If IsNumeric(ComboBox1.Text) And IsNumeric(ComboBox2.Text) And IsNumeric(ComboBox3.Text) And IsNumeric(ComboBox4.Text) Then
            Suma += ComboBox1.Text + ComboBox2.Text + ComboBox3.Text + ComboBox4.Text
        End If

        txtResultado.Text = Suma
    End Sub
End Class

si vamos a darle valores, por ejemplo,
ComboBox1.Text = 1
ComboBox2.Text = 2
ComboBox3.Text = 3
ComboBox4.Text = 4
En el txtResultado dirá: 1234. Esto está mal. ¿Por qué? Porque la propiedad .Text del ComboBox trabaja con formato texto... Es decir que concatena, no suma valores, porque no puede sumar "Hola" y "Chau", ya que es texto y no números, por lo que debemos anteponer (en mi mensaje anterior también debería ir, pero como es un sólo ComboBox no hacía falta) la función Val() para cada uno de los ComboBox.



El código en definitiva queda:
Código: [Seleccionar]
Public Class Form1
    Dim Suma As Double
    Private Sub Button1_Click(...) Handles Button1.Click
        If IsNumeric(ComboBox1.Text) And IsNumeric(ComboBox2.Text) And IsNumeric(ComboBox3.Text) And IsNumeric(ComboBox4.Text) Then
            Suma += Val(ComboBox1.Text) + Val(ComboBox2.Text) + Val(ComboBox3.Text) + Val(ComboBox4.Text)
        End If

        txtResultado.Text = Suma
    End Sub
End Class

Saludos
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: hfarias en 17 Noviembre, 2017, 09:15 pm
Estimado manooooh te molesto nuevamente,lo hice cómo me indicas en código anterior donde agregue tres (3) ComboBox mas al Form y me da Cero( 0) al seleccionar el primer número en el TextBox.

ComboBox1 = (100+300+200)

ComboBox2 = (1000+2000+5000)

ComboBox3 = (600 + 800 500)

ComboBox4 = ( 400 + 1200 +150)

La suma Total debe dar (600+8000+1900+1750) = 12250

Anteriormente si me da en el TextBox la suma (600) sin ningún problema,he probado con hacerlo encerrando con parentesis  ( Suma += (Val(Combobox1.Text)) + los otros combos pero tampoco Funciona.

¿ Si hago cuatro códigos iguales para cada Combo y Cuatro TextBox,luego tomaria en un Label o TextBox el resultado Final?

Te envío los archivos jpg.

Gracias.



Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: manooooh en 17 Noviembre, 2017, 10:14 pm
Hola, ahora te contesto rápido y más tarde lo seguimos viendo.

Estimado manooooh te molesto nuevamente,lo hice cómo me indicas en código anterior donde agregue tres (3) ComboBox mas al Form y me da Cero( 0) al seleccionar el primer número en el TextBox.

ComboBox1 = (100+300+200)

ComboBox2 = (1000+2000+5000)

ComboBox3 = (600 + 800 500)

ComboBox4 = ( 400 + 1200 +150)

La suma Total debe dar (600+8000+1900+1750) = 12250

Anteriormente si me da en el TextBox la suma (600) sin ningún problema,he probado con hacerlo encerrando con parentesis  ( Suma += (Val(Combobox1.Text)) + los otros combos pero tampoco Funciona.

¿ Si hago cuatro códigos iguales para cada Combo y Cuatro TextBox,luego tomaria en un Label o TextBox el resultado Final?

Te envío los archivos jpg.

Gracias.

¿Qué querés hacer específicamente? Lo que el usuario tiene que hacer con el código que arreglamos es escribir manualmente en cada ComboBox un número, y luego clickear en Button1 para que le aparezca la suma de los campos en el txtResultado... No hay que tocar para nada el TextBox, solamente este programa usa los ComboBox para el ingreso de datos. ¿Vos querés que en cada ComboBox figure una lista desplegable con valores y así no hacer que escriba el usuario el dato? Para que lo seleccione, digo... De hecho ésta sería la forma de hacer este ejercicio, pues para eso usamos los ComboBox: significa "Caja combinada" jaja.
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: hfarias en 18 Noviembre, 2017, 03:10 am
Estimado manooooh lo próbe con el código que me indicaste y me da la suma de los cuatro (4) Cómbos correctamente,pero  lo quiero hacer introduciendo los valores desde la propiedad Items,con "Caja Desplegable " en cada Combo.

La pregunta es ¿ Como hago para cálcular el promedio de ventas de cada vendedor en cada Combo?
Gracias.
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: manooooh en 18 Noviembre, 2017, 05:16 am
Hola,

Estás haciendo 2 preguntas y estás agregando información nueva, que es que cada ComboBox representa las ventas del vendedor. Vamos de a poco.



lo quiero hacer introduciendo los valores desde la propiedad Items,con "Caja Desplegable " en cada Combo.

Esto ya lo habíamos discutido acá (http://rinconmatematico.com/foros/index.php?topic=99046.msg396453#msg396453). De todas formas te pregunto y explico de nuevo: ¿Cómo se ingresan los datos? ¿El usuario debe ingresar los valores a cada ComboBox o los ingresás vos? En este último caso en el link lo tenés resuelto, pero lo escribo para cada ComboBox.

Vamos a usar la propiedad .Items.Add(), que agrega un elemento dentro del ComboBox:
Código: [Seleccionar]
cmbVendedor1.Items.Add(5)
cmbVendedor1.Items.Add(60)
agrega 5 y luego 60 al ComboBox del vendedor 1. Para el resto es:
Código: [Seleccionar]
cmbVendedor2.Items.Add(40)
cmbVendedor2.Items.Add(20)

cmbVendedor3.Items.Add(10)
cmbVendedor3.Items.Add(15)

cmbVendedor4.Items.Add(20)
cmbVendedor4.Items.Add(50)

Como te dije, es recomendable que este código lo hagas una vez que el Formulario cargue. En definitiva queda:
Código: [Seleccionar]
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cmbVendedor1.Items.Add(5)
        cmbVendedor1.Items.Add(60)

        cmbVendedor2.Items.Add(40)
        cmbVendedor2.Items.Add(20)

        cmbVendedor3.Items.Add(10)
        cmbVendedor3.Items.Add(15)

        cmbVendedor4.Items.Add(20)
        cmbVendedor4.Items.Add(50)
End Sub

Vos agregá y modificá los elementos que creas necesario.

OTRA OPCIÓN: en vez de cargar mediante código los valores podés hacerlo desde la ventana Diseño del Proyecto. Para esto debés clickear cualquier ComboBox, irte a Propiedades -> Items | (Colección) -> ... -> escribir los valores (un valor, apretar Enter) -> Aceptar. Mirá la imagen:

(https://foro.rinconmatematico.com/index.php?action=dlattach;topic=99560.0;attach=19128)



¿ Como hago para cálcular el promedio de ventas de cada vendedor en cada Combo?

Bueno bueno... si ésto no lo habré hecho miles de veces en la secundaria... :P.
Para hallar el promedio de cualquier cosa, en general debemos contar con
¿Por qué? Porque queremos sumar todos los valores conociendo también cuántas veces ingresó dichos valores para calcular el promedio. Estas 3 son variables; el contador puede guardar valores enteros (Integer), mientras que la suma y el promedio nos pueden arrojar cifras decimales... por lo que recomiendo que las declaremos como Double.

Ahora bien, ¿cuál es el algoritmo para hallar el promedio? ¡Es muy fácil!

\( \textrm{Promedio} = \textrm{Acumulador} / \textrm{Contador} \).

Para esto declaremos las variables en el ámbito público (sólo para 1 vendedor):
Código: [Seleccionar]
Dim Co1 As Integer
Dim Suma1, Promedio1 As Double

Ahora bien, cada vez que apretamos el botón nos tiene que hacer el promedio y mostrarlo. Para ésto:
Código: [Seleccionar]
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If IsNumeric(cmbVendedor1.Text) Then
            Suma1 += Val(cmbVendedor1.Text) ' Acumulador
            Co1 += 1                        ' Contador
        End If
        Promedio1 = Suma1 / Co1             ' Cálculo del Promedio

        txtProm1.Text = Promedio1           ' Mostramos Promedio en un TextBox
End Sub


Pero no es un sólo ComboBox... te dejo que hagas los otros 3, que son iguales (acordate de declarar una variable Acumulador, Contador y Promedio por cada vendedor), además de agregar TextBox para mostrar el Promedio.



Saludos
Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: hfarias en 18 Noviembre, 2017, 06:28 pm
Te agradesco mucho tu ayuda manooooh ,entiendo todo lo que me has explicado,también se que hay que utilizar Acumuladores,etc.

lo que pasa es que todos estos ejercicios del libro son en seudocódigo y tienes que respetar el diseño de la interfaz gráfica que ellos te piden,que  muchas veces no se corresponden en cómo deben ser resueltos.
Gracias nuevamente.

Título: Re: Sumar Valores desde Combobox a Textbox
Publicado por: manooooh en 18 Noviembre, 2017, 06:38 pm
Te agradesco mucho tu ayuda manooooh ,entiendo todo lo que me has explicado,también se que hay que utilizar Acumuladores,etc.

lo que pasa es que todos estos ejercicios del libro son en seudocódigo y tienes que respetar el diseño de la interfaz gráfica que ellos te piden,que  muchas veces no se corresponden en cómo deben ser resueltos.
Gracias nuevamente.



Sí, me ha pasado haciendo exámenes de VB.NET. Lo que te recomiendo es que le preguntes a tu profesor tu manera de encarar el ejercicio diciéndole qué controles usaste y cuáles no (los que ellos hicieron). Siempre vas a tener razón porque la mayoría de las veces ellos agregan información que nada tiene que ver con el diseño.

Saludos