Autor Tema: form show, hide y focus en Visual Basic  (Leído 34674 veces)

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
form show, hide y focus en Visual Basic
« en: 15 de Abril 2012, 20:19 »
La consulta recibida es la siguiente:

Mensaje:  Hola estoy estudiando programacion en visual basic 5, me cuesta porque no tuvimos una buena base los años anteriores por diferentes causas de los profesores.

Tengo un ejercicio con cuatros pantallas, los dos primeros me dan bien estos se tratan de colocar el apellido, nombre y dni en la primera pantalla con la venta de cada mes del primer semestre de un vendedor con un boton comamd buton "siguiente" con este debe pasar los tres primeros datos deben aparecer en la segunda pantalla con laventa de cada mes del vendedor cuyos resultados deben aparecer en el formulario3 en donde debemos colocar una comision. Damos en siguiente para pasar al formulario 4 en donde nos debe aparecer el Apellido, Nombre y el resultado de la operacion en el formulario3, puse los siguientes codigos:

Private Sub cmdCancelar_Click()
txt3.Text = " "
CancelUpdate
End Sub

Private Sub cmdSiguiente_Click()
Dim Porcentaje As Double
Porcentaje = Text3.Text
Comisionanual = (RPS + RSS) * Porcentaje / 100
Comisionanual.Show
End Sub

Private Sub Form_Load()
Text1.Text = RPS
Text2.Text = RSS
End Sub

pero me da un error en Comisionanual = (RPS + RSS) * Porcentaje / 100 lo que no me permite pasar al formulario4

ah en el formulario4 puse lo siguiente:
Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Text3.Text = Comisionanual
End Sub

Por favor ayudenme a comprender mejor leo todos lo que tienen y me ayudan a comprender un poco mejor desde ya muchisimas gracias


Respuesta: Hola, las cuestiones a comprobar son varias:

- La primera, ¿qué es RPS Y RSS? Suponemos que son variables numéricas y que tienen como ámbito el adecuado, pero habría que comprobarlo.

- La segunda cosa que llama la atención es la línea Porcentaje = Text3.Text

El tipo que devuelve un control text es tipo texto, mientras que tú necesitas un tipo numérico.

Te recomiendo que te leas esta entrega del curso de Visual Basic: La función Val con Visual Basic para transformar texto en valores numéricos. Ejemplo de uso (CU00318A), que tienes en esta URL: https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=203:la-funcion-val-con-visual-basic-para-transformar-texto-en-valores-numericos-ejemplo-de-uso-cu00318a&catid=37:curso-qprogramacion-en-visual-basic-nivel-iq&Itemid=61

Lo que parece más lógico sería poner:

Porcentaje = Val(Text3)

Con esto podrías probar, pero aún así deberías introducir alguna validación o mecanismo de comprobación de que el valor que te introduzca el usuario es válido.

Pruébalo y si das más detalles quizás te podamos orientar algo más. Saludos.
« Última modificación: 24 de Septiembre 2014, 20:05 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #1 en: 16 de Abril 2012, 07:58 »
Discculpen las molestias y para que me entiendan mejor les paso el ejercicio, no para que me lo hagan sino que me aclaren y pueda entenderlo

1)Se debe diseñar un sistema compuesto por 4 form. que calculara la comision anual variable obtenida de las ventas mensuales de cada empleado

2)diseñar los sig. form.a)debe contener el titulo ventas totales del primer semestre -- apellido, nombre y dni del empleado -- Las ventas totales del primer semestre discriminadas por mes, un boton cancelar que anula todo el procedimiento y un boton siguiente que nos traslade a la pantalla dos

b) debe contener el titulo ventas totales del segundo semestre -- los datos del empleado que deben aparecer automaticamente ya que fueron ingresados en el form.

1 -- discriminar por mes las ventas del segundo semestre

c) debe mostrar el total del primer semestre y solicitar que se ingrese el òrcentaje de comision

d) debe mostrar los datos del vendedor y la comision anual obtenida, que se obtendra de la siguiente manera sumar el total del primer semestre al total del segundo semestre este resultado multiplicarlo por el porcentaje de comision ingresado y dividirlo en 100

En la primera cuestion : RPS SIGNIFICA RESULTADO PRIMER SEMESTRE y esta variable esta declarada en un modulo con las demas variables
RSS significa Resultado Segundo Semestre

modulo 1
Public Apellido As String
Public Nombre As String
Public Dni As String
Public RPS As Double
Public RSS As Double
Public Porcentaje  As Double
Public Comision As Double

En la 2º cuestion:  - La segunda cosa que llama la atención es la línea Porcentaje = Text3.Text

Private Sub cmdSiguiente_Click()
Dim Porcentaje As Single
Porcentaje = Val(Text3)
Comisionanual = (RPS + RSS) * Porcentaje / 100
Comisionanual.Show
End Sub

Corregi lo que me dijiste aún me da un error de Compilacion-- uso no valido de la Propiedad  Comisionanual =
con referencia a  La función Val sólo reconoce el punto (.) como separador decimal válido (aunque esto puede verse afectado por la configuración regional de tu ordenador)

Mi configuracion esta como separador la coma,  en ese caso como utilizaria la funcion de conversion de tipos de como CSng ó CDbl para convertir la cadena a un número.

Gracias y disculpe las molestia

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #2 en: 16 de Abril 2012, 08:09 »
Te comento las cosas que no me parecen correctas:

1. Si has declarado Porcentaje as Double previamente, ¿para qué lo vuelves a declarar como Porcentaje as Single? Si ya lo tienes declarado, no veo para qué volverlo a declarar.

2. Si has declarado una variable que se llama Comision, ¿cómo estás usando una variable que se llama Comisionanual? Si es la misma variable, no necesitarás declararla de nuevo. Si es una variable distinta, necesitarás declararla con su nombre correcto.

Con respecto a la configuración de tu ordenador para el uso de punto o coma como separador decimal, usa el separador que te funcione. Podrías implementar el que cuando se introduzca un separador no válido te lo transforme automáticamente en el otro, pero eso ya serían mejoras. Lo primero es conseguir que el programa funcione. Saludos.


Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #3 en: 16 de Abril 2012, 15:26 »
Buen dia corregi los errores pero me da uso no valido de la propiedad "Comision"
Private Sub cmdSiguiente_Click()
Dim porcentaje As Double
porcentaje = Val(Text3)
Comision = (RPS + RSS) * porcentaje / 100
Comision.Show
End Sub

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #4 en: 16 de Abril 2012, 16:00 »
Creo que la sintaxis Comision.Show no es correcta, a mí por lo menos a primera vista no me lo parece.

El resultado tendrás que mostrarlo dentro de un Label o de otra manera.

Créate un Label en el formulario (de la misma forma que creas un botón puedes crear un label) que por ejemplo se llamará Label1. Luego escribe algo así como

Show
Label1.Caption = "El resultado obtenido es: " & Comision


También puedes probar para ver si está funcionando con una instrucción print como:

Print "El resultado obtenido es " & Comision & " aquí puedes añadir texto si quieres"

Una vez esté funcionando ya le pones el formato que más te guste, como si quieres ponerlo en un msgBox...


Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #5 en: 16 de Abril 2012, 16:26 »
si te comprendo pero el error es en comision= (RPS + RSS) * porcentaje / 100 me da uso no valido de la propiedad, en el form comision tengo esto
Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Val(Text3) = Comision
End Sub

Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #6 en: 16 de Abril 2012, 17:14 »
Ayuda por favor !!!!!!!!

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #7 en: 16 de Abril 2012, 17:18 »
Aquí tienes un error:

Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Val(Text3) = Comision
End Sub

Supongo que lo que querías poner es:

Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Comision = Val(Text3)
End Sub

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #8 en: 16 de Abril 2012, 17:20 »
¿Por qué no pones todo el código que tienes, ordenadamente, para verlo en conjunto?

Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #9 en: 16 de Abril 2012, 17:38 »
Private Sub cmdCancelar_Click()
txt3.Text = " "
CancelUpdate
End Sub

Private Sub cmdSiguiente_Click()

esto en form porcentaje
Dim Porcentaje As Double
Porcentaje = Val(Text3)
Comision = (RPS + RSS) * Porcentaje / 100
Text3.Text = Comision
Comision.Show
End Sub

Private Sub Form_Load()
Text1.Text = RPS
Text2.Text = RSS
End Sub
esto en el form comision
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Comision = Val(Text3)
End Sub

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #10 en: 16 de Abril 2012, 17:53 »
Veamos:

esto en form porcentaje
Dim Porcentaje As Double
Porcentaje = Val(Text3)  Rem Aquí dices que porcentaje es lo que contenga Text3
Comision = (RPS + RSS) * Porcentaje / 100
Text3.Text = Comision Rem aquí dices que Text3 es Comision
Comision.Show
End Sub

No le veo sentido a lo que haces. Tienes que detenerte a pensar:

Un control Text es un control u objeto que contiene texto. Ese texto, si es un valor numérico, lo puedes transformar en un valor numérico. Pero ¿qué sentido tiene que digas Text3.Text = Comision después de haber dicho que Porcentaje era el contenido de Text3? Yo al menos no le veo sentido.

Si me pasas en un adjunto los archivos del proyecto de Visual Basic te lo miro directamente viendo el código en mi ordenador...


Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #11 en: 16 de Abril 2012, 18:18 »
disculpa yo tambien no me entiendo pero corregi algo y me da la pantalla siguiente con el apellido y el nombre, pero no me sale el resultado en comision anual
esto puse ahora en el formulario de porcentaje
Private Sub cmdCancelar_Click()
txt3.Text = " "
CancelUpdate
End Sub

Private Sub cmdSiguiente_Click()
Dim Porcentaje As Double
Porcentaje = Val(Text3)
Comision = (RPS + RSS) * Porcentaje / 100
formComision.Show
End Sub

Private Sub Form_Load()
Text1.Text = RPS
Text2.Text = RSS
End Sub

ya me salio gracias por tu ayuda puse esto en formulario porcentaje
Private Sub cmdSiguiente_Click()
Dim Porcentaje As Double
Porcentaje = Text3.Text
Comision = (RPS + RSS) * Porcentaje / 100
formComision.Show
End Sub

en el formulario comision:
Private Sub Form_Load()
Text1.Text = Apellido
Text2.Text = Nombre
Text3.Text = Comision
End Sub

ahora te pido que me guies en esto del boton Inicio para que vuelva al principio y otra para que el cursor salga ppor ejemplo en la caja de texto 4 para ingresar datos debo poner en el formulario 1 "ventas" o en el formulario 2 "ventas2" text4.setfocus o como hago para que el cursor me salga en el texto box en donde debo ingresar los datos desde ya mil disculpas por las molestias y nuevamente gracias por tu tiempo

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #12 en: 16 de Abril 2012, 18:30 »
SetFocus es un método que te permite fijar la ventana u objeto activo en un momento dado.

No puedes usar SetFocus en el formload ni en las declaraciones generales.

Para establecer el foco en un formulario usa una expresión como:

form1.SetFocus

Para establecer el foco en un control concreto usa algo como:

Text4.SetFocus

Piensa bien el orden en que vas fijando el foco. Es decir, el foco tendrás que fijarlo después de que el usuario haya pulsado un botón determinado, para enviar el foco allá donde quieras ponerlo. No tendrá sentido que establezcas el foco en medio de una declaración de código sin que el usuario haya pulsado algún botón.


Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #13 en: 16 de Abril 2012, 19:09 »
lo que me decis  lo hice en el boton cancelar y me sale bien cuando lo cancelo pero como lo hago sin ponerlo en form-load ni dentro de los codigos no entiendo como seria en este caso y lo del boton inicio me lo podes explicar ?? gracias

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #14 en: 16 de Abril 2012, 23:29 »
Creo que el SetFocus es sólo para los controles (textBox, botones, etc.). En el caso de los formularios (forms) el que se muestren u oculten lo puedes controlar con los métodos Show y Hide propios de formularios.

Te pongo un ejemplo:

Tenemos un formulario denominado Form1, en el cual existe un label denominado label1 y un botón denominado Command1 cuya propiedad Caption es "Pasar a Form2"

Tenemos un formulario denominado Form2, en el cual existe un label denominado label1 y un botón denominado Command1 cuya propiedad Caption es "Pasar a Form1"

El código asociado al formulario 1 es:

Private Sub Form_Load()
Label1 = "ESTE ES EL FORM 1"
End Sub

Private Sub Command1_Click()
Form2.Show
Form1.Hide
End Sub


El código asociado al formulario 2 es:

Private Sub Form_Load()
Label1 = "ESTE ES EL FORM 2"
End Sub

Private Sub Command1_Click()
Form1.Show
Form2.Hide
End Sub


De esta manera, puedes saltar al formulario que quieras (ir al inicio, ir al final, ir a donde quieras). Lo único que tienes que hacer es mostrar los forms que quieras con el método Show y ocultar los demás.

Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #15 en: 17 de Abril 2012, 14:25 »
Si se que puedo ir a cualquier formulario con  .show, ahora en la última pantalla tengo un commandBooton "Inicio" y quiero ir al inicio de la aplicacion, lo logro colocando el nombre del formulario.show pero quiero que los textbox de este formulario se limpien para comenzar a colocar datos dentro de los mismos mira lo intento de diferentes maneras como esta:
Private Sub cmdInicio_Click()
Text1.Text = "  "
Text2.Text = "  "
Text3.Text = "  "
Text4.Text = "  "
Text5.Text = "  "
Text6.Text = "  "
Text7.Text = "  "
Text8.Text = "  "
Text9.Text = "  "
Text1.SetFocus
Ventas.Show
End Sub

vos que decis?

Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #16 en: 17 de Abril 2012, 14:27 »
Si se que puedo ir a cualquier formulario con  .show, ahora en la última pantalla tengo un commandBooton "Inicio" y quiero ir al inicio de la aplicacion, lo logro colocando el nombre del formulario.show pero quiero que los textbox de este formulario se limpien para comenzar a colocar datos dentro de los mismos mira lo intento de diferentes maneras como esta:
Private Sub cmdInicio_Click()
Text1.Text = "  "
Text2.Text = "  "
Text3.Text = "  "
Text4.Text = "  "
Text5.Text = "  "
Text6.Text = "  "
Text7.Text = "  "
Text8.Text = "  "
Text9.Text = "  "
Text1.SetFocus
Ventas.Show
End Sub

vos que decis?

Me sale una depuracion en text4.text= " " sera porque en el formulario existe una linea separando los tres primeros textbox de los siguientes?

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #17 en: 17 de Abril 2012, 14:38 »
Tienes que controlar desde dónde actúas. Por ejemplo, no puedes pretender limpiar el formulario 1 desde un botón del formulario 4.

A mí lo que se me ocurre es algo así como:

modulo 1
Public Apellido As String
Public Nombre As String
Public Dni As String
Public RPS As Double
Public RSS As Double
Public Porcentaje  As Double
Public Comision As Double
Public LimpiarFormVentas As Boolean

Es decir, tener una variable global que te controle si hay que limpiar el formulario.

Luego:

Private Sub cmdInicio_Click()
LimpiarFormVentas = True
Ventas.Show
End Sub

Ahora en el form ventas en el form_load pondríamos algo así:

if LimpiarFormVentas = True Then
Text1.Text = "  "
Text2.Text = "  "
Text3.Text = "  "
Text4.Text = "  "
Text5.Text = "  "
Text6.Text = "  "
Text7.Text = "  "
Text8.Text = "  "
Text9.Text = "  "
Text1.SetFocus
... etc etc


Si no es en el form_load tendrá que ser cuando el formulario coja el foco o algún evento de deste tipo:

Private Sub Form_GotFocus()
if LimpiarFormVentas = True Then
Text1.Text = "  "
Text2.Text = "  "
Text3.Text = "  "
Text4.Text = "  "
Text5.Text = "  "
Text6.Text = "  "
Text7.Text = "  "
Text8.Text = "  "
Text9.Text = "  "
Text1.SetFocus
End Sub

A lo que me refiero, en definitiva, es que cada cosa tiene su ámbito. Si quieres modificar el form1 tendrás que hacerlo desde el form1, no desde otro lado.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #18 en: 17 de Abril 2012, 14:39 »
Por cierto, después de limpiarlo todo tendrás que volver a poner LimpiarFormVentas = False porque si no se te va a quedar siempre como True y no funcionaría.

Milanga

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:consulta visual Basic 5
« Respuesta #19 en: 17 de Abril 2012, 15:01 »
OK resulta mas fácil como vos decís, controlarlo desde el mismo formulario ya que tengo el botón cancelar de donde vuelvo todo a cero, gracias por todo, me aclaraste varios puntos el principal es que debo pensar lo que quiero y luego encarar el problema, un abrazo y nos estaremos conectando nuevamente ante alguna duda muchas gracias!!!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".