elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  necesito orientación sobre programación, me ayuda alguien ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: necesito orientación sobre programación, me ayuda alguien ?  (Leído 2,715 veces)
PROFENIX

Desconectado Desconectado

Mensajes: 18


Ver Perfil
necesito orientación sobre programación, me ayuda alguien ?
« en: 23 Diciembre 2018, 22:32 pm »

hola antes que nada decir que yo de programación no tengo ni idea. pues a ver mi intención es hacer un mini programa que no necesite instalación que una vez lo compiles sea un simple exe, entonces necesito que alguien que sepa me diga que debería de usar y yo ya me buscaría la vida buscando código y demás por hay.

como ya he dicho de programación no se nada y después de llevarme un rato haciendo el diseño en el visual basic del excel me entero que no podría compilar lo que llevaba hecho para hacerlo funcionar sin que necesitase el excel en el ordenador donde lo llevase. entonces antes de cometer el mismo error, pues e pensado en preguntar a gente que sepa de la materia, para no volver a perder el tiempo.

a continuación os enseño lo que había hecho en visual basic



bien como podréis ver no es nada del otro mundo, la intención de este programa es que cuando metas las cantidades el programa te lo multiplique por los billetes y monedas que tiene representado a su izquierda, este resultado te lo enseñe en importe el cual no puedas tocar me refiero que no puedas modificar por otras cantidades o borrar y abajo donde pone total te lo sume y haga lo mismo solo mostrarte el resultado sin que puedas modificar o borrar la cantidad que te de.

aquí tenéis en excel hecho lo que quiero hacer, por si no entendéis lo que intento explicar

https://www.justbeamit.com/vgudp

pues eso me gustaría hacer que fuese un exe y que no necesite de instalación, ya que donde se ejecutaría es un PC antiguo sin acceso a internet y al que tampoco se le puede instalar cosas.

entonces en que programa hago de nuevo el diseño, programo el tema de las multiplicaciones y la suma y que una vez lo compile quede en un simple exe


En línea

Serapis
Colaborador
***
Conectado Conectado

Mensajes: 2.701


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #1 en: 24 Diciembre 2018, 02:28 am »

No sé quien te haya dicho que no puedes hacerlo en VB, pero es completamente falso.

Ahora bien, para una cosa tan sencilla, no necesitas excel para nada.

Crea la interfaz desde el propo Visual Basic.

Debes crear una función llamada totalizar, que recalcula la suma total, cada vez que cambie un valor (mejor que usar el evento 'change' usar el evento 'validate').

Tengamos controles de texto llamados txtBillete50, txtBillete20, ...txtBillete1, ... txtBillete01... txtBillete001, en estos usaremos el evento validating para verificar que el valor recibido es válido como número. Es entonces cuando si pasa la validación, cambia el valor de la casilla de la derecha. Y cada vez que la casilla de texto de la derecha cambie, se totaliza... y el resultaod se pone en txtTotal.

Los controles de la derecha los he llamado tal que txtImporte50, txtImporte20 y txtImporteX5 (se me coló el X, ya no lo voy a cambiar). Estos controles les he puesto la propiedad 'Readonly' a TRUE, para que el usuario no pueda modificar el valor y el fondo de color amarillo.

Los controles 'label' (etiquetas), no importa el nombre que tengan...

Al código, se adjunta una pequeña vistosidad... el evento validating, solo salta cuando el control 'pierde el foco', eso implica que mientras no se pinche en otro lado, no se ejecutará el código asociado... entonces mientras editamos el texto de los txtBillete... cambiamos su color de fondo, a beige, y cuando haya sido validado a blanco... También puede optarse por ocultar el txtTotal cuando se está editando los txtBillete... y hacerlo visible  cuando saltó el evento 'validated'... así el resultado  no se podría saber hasta no haber validado el control siendo editado. Pero bueno, queda a tu esfuerzo...

Te pego todo el código de lo que se ve en la ventana...
Qué falta: pués poner el resto de controles para el resto de monedas, y añadir el manejador de eventos de cada caso correspondiente. Puedes fijarte para ello en el código... Se puede optimizar, pero siendo neófito, así te vale para poder 'entenderlo'.

Aquí una imagen de la interfaz:


Si ejecutas el código paso a paso (pulsa la tecla F11, cada vez), podrás ver como salta por el código...
Código
  1. Public Class Form1
  2.    Private Inicializado As Boolean
  3.  
  4.    Private Sub txtBillete50_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBillete50.TextChanged, txtBillete20.TextChanged, txtBillete5.TextChanged
  5.        sender.backcolor = Color.Beige
  6.        txtTotal.Visible = False
  7.    End Sub
  8.  
  9.    Private Sub txtBillete50_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBillete50.Validated, txtBillete20.Validated, txtBillete5.Validated
  10.        sender.backcolor = Color.White
  11.        txtTotal.Visible = True
  12.    End Sub
  13.  
  14.    Private Sub txtBillete50_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete50.Validating
  15.        Dim v As UShort  'UInt16 entero de 16 bits (valor en el rango: 0-65536)
  16.        ' si admite un valor negativo, cambia al tipo short (int16)
  17.  
  18.        If UShort.TryParse(txtBillete50.Text, v) = False Then
  19.            e.Cancel = True
  20.            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 50'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  21.            'txtImporte50.Text ="0"
  22.        Else
  23.            txtImporte50.Text = (v * 50).ToString
  24.        End If
  25.    End Sub
  26.  
  27.    Private Sub txtBillete20_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete20.Validating
  28.        Dim v As UShort
  29.        If UShort.TryParse(txtBillete20.Text, v) = False Then
  30.            e.Cancel = True
  31.            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 20'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  32.        Else
  33.            txtImporte20.Text = (v * 20).ToString
  34.        End If
  35.    End Sub
  36.  
  37.    Private Sub txtBillete5_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles txtBillete5.Validating
  38.        Dim v As UShort
  39.        If UShort.TryParse(txtBillete5.Text, v) = False Then
  40.            e.Cancel = True
  41.            Call MessageBox.Show("No puede tomarse como un numero el valor para 'billete de 5'.", "Error: No es un numero.", MessageBoxButtons.OK, MessageBoxIcon.Warning)
  42.        Else
  43.            txtImporteX5.Text = (v * 5).ToString
  44.        End If
  45.    End Sub
  46.  
  47.    Private Sub Totalizar() Handles txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporteX5.TextChanged
  48.        dim CantidadTotal As UInteger  ' entero de 32 bits...
  49.  
  50.        If (Inicializado = True) Then
  51.            CantidadTotal = 0
  52.            CantidadTotal += UInteger.Parse(txtImporte50.Text)
  53.            CantidadTotal += UInteger.Parse(txtImporte20.Text)
  54.  
  55.            CantidadTotal += UInteger.Parse(txtImporteX5.Text)
  56.  
  57.            txtTotal.Text = CantidadTotal.ToString
  58.        End If
  59.    End Sub
  60.  
  61.  
  62.  
  63.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  64.        Inicializado = True
  65.    End Sub
  66. End Class
  67.  


« Última modificación: 24 Diciembre 2018, 02:36 am por NEBIRE » En línea

PROFENIX

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #2 en: 24 Diciembre 2018, 13:57 pm »

he hecho el mismo diseño y un copia y pega del código para llegar a entenderlo pero me salta un error



para no hacer 33 capturas a los textbox le e puesto el mismo nombre en el text que en el diseño por si e cometido algún error con tu explicación el cual no me doy cuenta
En línea

Serapis
Colaborador
***
Conectado Conectado

Mensajes: 2.701


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #3 en: 24 Diciembre 2018, 15:30 pm »

Parece que solo te falla el textbox de importe 5.
Fíjate que yo le he llamado "txtImporteX5", no "ImporteX5"
Los dos últimos fallos, te señala que en efecto no existe el control txtImporteX5, porque le diste un nombre distinto.
El primer error, también se corregirá ya que el manejador de eventos (handles), para dicho control se creará cuando tenga tal nombre.

Como los controles, deben alojar valores numéricos, no escribas nada en ellos durante diseño... a lo sumo un "0" (cero).

El código escrito en los txtBillete... en el evento validating, se asegura que lo que introduzcas sea un valor numérico...
Código
  1.        Dim v As UShort
  2.        ' Se puede convertir el contenido de este control en un número entero de 16 bits?
  3.        If UShort.TryParse(txtBillete20.Text, v) = False Then
  4.            ' Si es que no, cancelamos la validación: el foco se mantendrá en el control
  5.            '       hasta que se introduzca un valor numérico aceptable.
  6.            e.Cancel = True  
  7.            ' entonces no saltará el evento 'validated'.
  8.        else    ' ok, pasó la validación, entonces
  9.              ' entonces pasamos la cantidad de billetes a dinero en el textbox a su derecha.
  10.              ' como es de 20, lo multiplicamos por 20. y lo convertimos a texto.
  11.              txtImporte20.Text = (v * 20).ToString
  12.              ' ahora si saltará el evento 'validated' que ocurrirá justo tras esto.
  13.        end if
« Última modificación: 24 Diciembre 2018, 15:32 pm por NEBIRE » En línea

PROFENIX

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #4 en: 25 Diciembre 2018, 05:55 am »

nuevo problema

En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.287

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #5 en: 25 Diciembre 2018, 07:24 am »

hay varias formas de solucionar ese problema, el más facil es asignarle el valor 0 a los textbox, porque sino no convierte una cadena con valor nulo a entero, otra forma sería verificar que si el textbox tiene un valor asignado haga la conversión.En resumen en tiempo de diseño donde dice text(en las propiedades)darle un valor 0   
En línea

PROFENIX

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #6 en: 25 Diciembre 2018, 13:12 pm »

hay varias formas de solucionar ese problema, el más facil es asignarle el valor 0 a los textbox, porque sino no convierte una cadena con valor nulo a entero, otra forma sería verificar que si el textbox tiene un valor asignado haga la conversión.En resumen en tiempo de diseño donde dice text(en las propiedades)darle un valor 0   

gracias con poner el 0 se me soluciono el problema.

lo que me gustaría saber ahora es que debería de poner para números con coma osea para monedas como seria 0,50 0,20, 0,10, 0,05 0,02 o 0,01

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

porque si pongo en txtImporteX5.Text = (v * 5).ToString le pongo v * 0,05 me lo da como erroneo
« Última modificación: 25 Diciembre 2018, 13:15 pm por PROFENIX » En línea

tincopasan


Desconectado Desconectado

Mensajes: 1.287

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #7 en: 25 Diciembre 2018, 16:35 pm »

Varias cosas:
1)en mi caso es raro que ponga un código hecho sin ver que a desarrollado quien pregunta, en este caso el código no es tuyo y supongo que el creador solo quiso orientarte, ya que es bastante malo(para mí)
2)
Citar
hola antes que nada decir que yo de programación no tengo ni idea. pues a ver mi intención es hacer un mini programa que no necesite instalación que una vez lo compiles sea un simple exe
está bien, pero deberías usar lo que te dan(para aprender) y no esperar todo hecho
3)hay una herramienta muy buena se llama google
4)en este caso el problema es la declaración de las variables ya que usan enteros y necesitas flotantes.
5)algo simple como cambiar:
Código
  1. CantidadTotal += Single.Parse(txtImporteX5.Text)
en la función totalizar
6)no te ofendas, ponele algo de interés en aprender lo básico, como lo hiciste para usar esa asquerosidad de excel.
En línea

Serapis
Colaborador
***
Conectado Conectado

Mensajes: 2.701


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #8 en: 25 Diciembre 2018, 16:37 pm »

Es verdad, estamos hablando de céntimos, que son fraccines de moneda.

En programación, en general casi todos los lenguajes siguen para números la convención del lenguaje de origen (el inglés), donde el separador de decimales (por defecto) es el punto. Así 0.5 es la mitad de uno...

Al multiplicar puede optarse por poner el valor constante, o una representación (que siempre resultaría)  (v* (1/2)), ya que 1/2= 0.5 y 1/10= 0.1

Eso sí en las fracciones declara 'v' como single, no como un tipo de datos numérico entero. Por tanto donde pone UShort, para esos casos sería Single
(como en dim v as single y en single.tryparse ... single.parse

Observa, por ejemplo para 1 céntimo: (le he llamado como al resto con el sufijo '001'):
Código
  1.    Private Sub txtBillete001_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TxtBillete001.Validating
  2.        Dim v As Single
  3.        If Single.TryParse(TxtBillete001.Text, v) = False Then
  4.            e.Cancel = True
  5.            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)
  6.        Else
  7.            / Estas don líneas son equivalentes y al compilar generarían el mismo código porque la parte
  8.            /  diferente entre ambas son constantes, que se resuelven en dicho momento.
  9.            TxtImporte001.Text = (v * 0.1).ToString
  10.            'TxtImporte001.Text = (v * (1 / 10)).ToString
  11.        End If
  12.    End Sub
  13.  


Por lo mismo (que tendremos decimales), en la función de totalizar, se debe cambiar el tipo de datos para "CantidadTotal", de UInteger a Single
Y por  la misma razón la conversión de texto a número debe forzarse a single, no a UInteger...
Observa como va quedando... y nota como he añadido el manejador de eventos (Handle), a la función para txtImporte001.textchanged (que viene a decir que cuando el valor de ese textbox, cambie se ejecute esa rutina).
He añadido un ---!!!--- para que aprecies los cambios y añadidos respecto de la versión previa...
Código
  1.    '------------------------------------------ !!!! ------------ !!! ----
  2.    Private Sub Totalizar() Handles TxtImporte001.TextChanged, txtImporte50.TextChanged, txtImporte20.TextChanged, txtImporteX5.TextChanged
  3.        ' -------------------------!!!---
  4.        Dim CantidadTotal As Single   ' entero de 32 bits...
  5.  
  6.        If (Inicializado = True) Then
  7.            ' ---------------------!!!-----
  8.            CantidadTotal = Single.Parse(txtImporte50.Text)
  9.            CantidadTotal += Single.Parse(txtImporte20.Text)
  10.  
  11.            CantidadTotal += Single.Parse(txtImporteX5.Text)
  12.  
  13.            ' ---!!! -------------------------------!!!------
  14.            CantidadTotal += Single.Parse(TxtImporte001.Text)
  15.  
  16.            txtTotal.Text = CantidadTotal.ToString
  17.        End If
  18.    End Sub
  19.  

Nota, por último que debes añadir el handles para cada txtBilleteXXX que añadas nuevo, para las rutinas:
Private Sub txtBillete50_TextChanged(...) y Private Sub txtBillete50_Validated(...) tal y como yo he hecho en totalizar. No confundas, en éstas es el manejador del textbox billete... en aquella es el textbox de importe.
Nota también que cuando añades el handle, 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...

...y bueno, ya deberías ser capaz de completarlo.
En línea

Serapis
Colaborador
***
Conectado Conectado

Mensajes: 2.701


Ver Perfil
Re: necesito orientación sobre programación, me ayuda alguien ?
« Respuesta #9 en: 25 Diciembre 2018, 16:43 pm »

Varias cosas:
1)en mi caso es raro que ponga un código hecho sin ver que a desarrollado quien pregunta...

Es un caso distinto, cuando alguien quiere aprender a programar y cuando alguien declara no tener ni idea ni estar interesado más que en resolver un único problema puntual y punto...
Así se presentaba:
Citar
hola antes que nada decir que yo de programación no tengo ni idea.

Entonces no cabe indicarle que estudie, que aprenda... solo cabe darle algo de código simple (adaptado a los que presenta), pero que pueda entender aunque sea subóptimo y que complete el resto.
En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito orientacion para aprender sobre..
Foro Libre
$Edu$ 3 1,617 Último mensaje 18 Noviembre 2011, 17:40 pm
por $Edu$
Necesito orientación sobre sentencia EXPLAIN
Bases de Datos
Hadess_inf 1 1,459 Último mensaje 18 Abril 2012, 01:47 am
por Shell Root
Necesito información sobre la programacion en red de juegos.
Programación General
anonimo12121 2 1,159 Último mensaje 25 Marzo 2013, 18:32 pm
por anonimo12121
Necesito ayuda y consejo sobre obtener la IP de alguien « 1 2 »
Hacking
scratcho57 13 7,001 Último mensaje 12 Mayo 2015, 16:12 pm
por Hurdano
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines