Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Recorrer Varios Controles (Solucionado)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Recorrer Varios Controles (Solucionado) 
 
Buenas, aquí volviendo de a poco a la programación. Estoy haciendo un programita donde necesito comparar valores entre diferentes variables por pares y en base a esto asignarlos un valor a los valuebox correspondeientes. Para el primer par uso el siguiente código
Public Sub Button2_Click()

 Dim vb1 As Integer
Dim vb2 As Integer
   vb1 = ValueBox3.Value
   vb2 = ValueBox4.value
   If vb1 = vb2 Then
      ValueBox7.Value = "1"
       ValueBox8.Value = "1"
       Else If vb1 < vb2 Then
         ValueBox7.Value = "0"
          ValueBox8.Value = "3"
      Else
        ValueBox7.Value = "3"
         ValueBox8.Value = "0"
  Endif
End
 

  El tema es que este mismo código debo repetirlo para los 9 pares de valuebox.Y el tema no es escribirlo, sino hacer el código más corto y legible. Pensé en un bucle for pero no se me ocurre como implementarlo.
¿Alguna sugerencia? Gracias desde ya.
S.O. Ubuntu11.04
gambas 3
 Gnome 2.32
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
última edición por Dani26 el Martes, 20 Septiembre 2011, 20:56; editado 2 veces 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles 
 
Hola colega.
Yo creo que lo que necesitas es una función, dentro del mismo formulario a la que llamas para cada variable. Puedes usar la propiedad Tag de los controles (en este caso ValueBox) para saber que variable afecta a cada uno y recorrer todos en la colección Control (o Children) que tienen todos los Forms.

Private Sub actualizar()
  Dim hctl As Control

  For Each hctl In Me.Children

    If hctl is ValueBox Then
        Print htcl.tag
        'Aquí usas la propiedad Tag como quieras y decides
        ' que y como actualizar el control
    Endif

  Next
  
End
 


Espero te sirva como orientación.

Un saludo
 



 
ahtonio - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles 
 
Hola,

O esta

Private Function compara(campo1 as ValueBox, campo2 as ValueBox) as integer
    Dim estado as integer=0
    If campo1.value = campo2.value then
       estado=1
    else
         if campo1.value > campo2.value then
             estado=2
         else
             estado=3
         EndIf
    EndIF
    Return estado
end
 



Public sub tunombre(campoE1 as ValueBox, campoE2 as ValueBox, campoS1 as ValueBox, campoS2 as ValueBox )
   Select Case compara(campoE1, campoE2)
     Case 1
        campoS1.Value = "1"
        campoS2.Value = "1"
     Case 2
        campoS1.Value = "3"
        campoS2.Value  = "0"
     Case 3
        campoS1.Value = "0"
        campoS2.Value  = "3"
   End Select
End Sub


Para usarla

Public Sub Button2_Click()
     tunombre(ValueBox3,ValueBox4,ValueBox7,ValueBox8)
End
 


Hay que añadir la gestión de errores.

Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles 
 
Gracias compañeros, en la noche pruebo (ojo que tenemos 5 horas de diferencia horaria) y luego les cuento.
Saludos
Pd.Funciona ok el segundo ejemplo. Cuando lo complete subo el código modificado. Gracias.
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
última edición por Dani26 el Martes, 20 Septiembre 2011, 20:57; editado 1 vez 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles (Solucionado)Código Final 
 
Amigos, aquí está como quedó el código final.
Private Function compara(campo1 As ValueBox, campo2 As ValueBox) As Integer
    Dim estado As Integer = 0
    If campo1.value = campo2.value Then
       estado = 1
    Else
         If campo1.value > campo2.value Then
             estado = 2
         Else
             estado = 3
         Endif
    Endif
    Return estado
End
 

Public Sub asignar(campoE1 As ValueBox, campoS1 As ValueBox, campoE2 As ValueBox, campoS2 As ValueBox)
   Select Case compara(campoE1, campoE2)
     Case 1
        campoS1.Value = "1"
        campoS2.Value = "1"
     Case 2
        campoS1.Value = "3"
        campoS2.Value = "0"
     Case 3
        campoS1.Value = "0"
        campoS2.Value = "3"
   End Select
End Sub

Public Sub Btnasignar_Click()
     asignar(ValueBox1, ValueBox2, ValueBox3, ValueBox4)
     asignar(ValueBox5, ValueBox6, ValueBox7, ValueBox8)
     asignar(ValueBox9, ValueBox10, ValueBox11, ValueBox12)
     asignar(ValueBox13, ValueBox14, ValueBox15, ValueBox16)
     asignar(ValueBox17, ValueBox18, ValueBox19, ValueBox20)
     asignar(ValueBox21, ValueBox22, ValueBox23, ValueBox24)
     asignar(ValueBox25, ValueBox26, ValueBox27, ValueBox28)
     asignar(ValueBox29, ValueBox30, ValueBox31, ValueBox32)
     asignar(ValueBox33, ValueBox34, ValueBox35, ValueBox36)

End

 Cómo verán los valuebox los nombre en orden, solo por una cuestión de organización. Y el código queda mucho màs corto y legible.
Saludos
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles (Solucionado) 
 
Con perdón, de legible nada. ¿Qué es valuebox33? ¿y valuebox36? ¿y campoS1?
Leyendo el código es imposible saber qué hace y que deja de hacer.

¿Por qué no utilizas nombres significativos para las cosas?
Si el campoS1 contiene el nombre ¿Por qué no llamarlo CampoNombre (por ejemplo)? Si el valuebox contiene el salario del empleado ¿Por qué no llamarlo vbSalario? (vb te dice que es un ValueBox y salario lo que contiene.

En el momento que tengas que hacer cálculos con tus datos te vas a volver loco.

Valuebox1 = (valuebox2 * valuebox3 /2) - valuebox3 + campos2

Intenta destripar qué hace ese código dos años después de haberlo escrito...
Échale un vistazo a éste enlace, que no hay por qué seguir al pie de la letra, pero que todo aquél que se auto denomine "Programador" debería conocer: http://es.wikipedia.org/wiki/Notaci%C3%B3n_h%C3%BAngara

Es sólo un consejo de viejo programador...
 




===================
No podemos regresar
 
última edición por shordi el Miercoles, 21 Septiembre 2011, 17:49; editado 1 vez 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles (Solucionado) 
 
Hola Dani,

Coincido con shordi. Cuanto más claro mejor.

Pues si te vale así aún podemos "dar un golpe de tuerca" aprovechando el código de ahtonio. No se si te puede resultar útil o no, pero yo lo pongo.

Public Sub Btnasignar_Click()
    Dim hctl As Control
    Dim values as new object[]
    Dim i as integer=0

    For Each hctl In Me.Children
      If hctl is ValueBox Then
           values.add(hctl)
      Endif
    Next

   For i=0 to values.count-1
       asignar(values[i], values[i+1], values[i+2], values[i+3])
       i +=3
   next

End


De esta forma puedes añadir todos los values que quieras respetando el orden y de cuatro en cuatro sin tocar nada.

Saludos
 



 
última edición por ljma el Miercoles, 21 Septiembre 2011, 17:51; editado 1 vez 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Recorrer Varios Controles (Solucionado) 
 
Citar:
Es sólo un consejo de viejo programador...

 Y muy sabio, sin duda. Sin intención de polemizar ni de justificarme paso a aclarar algunas cosas.
  Los nombres por lo general( quizà sea una práctica algo masoquista) los cambio a medida que voy avanzando en el programa, luego de comprobar que todo funciona. En el caso particular de estos valuebox(podría  llamarlos a lo sumo vbxx) no creo que lo haga porque un nombre descriptivo puede ser complicado, el orden en este caso particular me resulta màs ùtil.El botòn que "asigna" los valores se llama Btnasignar.
  Los cálculos a realizar con éstos son solo los de la función, el valor de los pares dependen de la comparación entre los impares y nada más. Eso lo voy a ir comentando en él código para que se entienda, aparte ya me pasò con visual basic al tratar de actualizar un programa que no habia comentado, los nombres descriptivos de los controles si me ayudaron.
  En cuanto a lo de más legible y claro. En comparaciòn con escribir la función para cada cuarteta de valuebox, me parece que sí. Pero ojo, es la impresiòn de un aficionado.
Lo de recorrer los controles con un for..each lo probé pero sin resultado alguno, en sí me parecía lo mejor pero no resolvía mi problema.
  Agradezco todos los consejos y/o críticas.
Saludos de un aficionado a la programación con un estilo bastante caótico.
 




===================
Migrando desde visual basic, el Gambas de Ms
Mi blog gambero
 
última edición por Dani26 el Miercoles, 21 Septiembre 2011, 23:56; editado 1 vez 
Dani26 - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Recorrer Campos De Una Tabla [Solucionado] maikl Bases de Datos 5 Sabado, 31 Octobre 2009, 01:20 Ver último mensaje
maikl
No hay nuevos mensajes Problemas Para Recorrer Un Columnview [Sol... chaskux Controles/Librerías/Componentes 5 Miercoles, 18 Noviembre 2009, 15:52 Ver último mensaje
soplo
No hay nuevos mensajes Recorrer Controles Iguales karpaga Controles/Librerías/Componentes 4 Lunes, 10 May 2010, 21:48 Ver último mensaje
fabianfv
No hay nuevos mensajes Cambiar Propiedad A Varios Controles A La Vez pittusa General 3 Lunes, 23 Agosto 2010, 20:21 Ver último mensaje
AnSnarkista
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron