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
-
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
-
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
Copio el código que escribiste:
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.
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).
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.
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:
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
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:
Suma += ComboBox1.Text
En definitiva el código bien queda:
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
-
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
-
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
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:
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:
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:
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
-
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.
-
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.
-
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.
-
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:
cmbVendedor1.Items.Add(5)
cmbVendedor1.Items.Add(60)
agrega 5 y luego 60 al ComboBox del vendedor 1. Para el resto es:
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:
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
- 1 acumulador,
- 1 contador, y
- 1 promedio donde guardemos el resultado.
¿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):
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:
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
-
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.
-
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