Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

código que no funciona para mostrar imégenes

Estas en el tema de código que no funciona para mostrar imégenes en el foro de Visual Basic clásico en Foros del Web. Hola. Estoy haciendo un programa de cálculo de estructuras de edificación y tengo un combobox inicial, 2 checkbox y después 4 filas y 4 columnas ...
  #1 (permalink)  
Antiguo 05/08/2008, 12:11
 
Fecha de Ingreso: julio-2008
Mensajes: 36
Antigüedad: 15 años, 9 meses
Puntos: 0
código que no funciona para mostrar imégenes

Hola. Estoy haciendo un programa de cálculo de estructuras de edificación y tengo un combobox inicial, 2 checkbox y después 4 filas y 4 columnas de combobox.

Pues bien el problema que tengo es que las imágenes del grupo de combobox de la primera columna no hay problema, como veis se ve la imagen correctamente, lo que pasa es que en las siguientes columnas (2, 3 y 4) el código es el mismo y no se me ven solo si pongo en el combobox el texto "Carga puntual", con "Carga uniforme" sí se ve correctamente, por lo que donde debe estar el error es en los casos 2ºA, 2ºB y 3ºA del código que os pongo a continuación. El combobox 1 es de el primero, checkbox1 es de la izquierda, y checkbox2 el de la dercha, y los combobox 3, 7 y 11 son los de la 2ª columna de arriba a abajo respectivamente.
¿Me podéis ayudar?
Gracias de antemano.
Este es el cógigo, que lo meto en los combobox antes nombrados, en click()

Código PHP:
Private Sub codigomomentosvano2()
'A PARTIR DE AQUÍ SON LAS IMÁGENES DE LOS MOMENTOS
Dim i As Integer
Dim m As Integer
For i = 0 To 27
Picture72(i).Visible = False
Next
For m = 0 To 6
Picture81(m).Visible = False
Next
    '
CASO PRIMERO
    
If Combo1.Text And Check2.Value 0 Then
        
'CASO 1º A
        If Combo3.Text = "Carga uniforme" And Combo7.Text = "Sin carga" And Combo11.Text = "Sin carga" Or Combo3.Text = "Carga uniforme" And Combo7.Text = "" And Combo11.Text = "" Or Combo3.Text = "Carga uniforme" And Combo7.Text = "Sin carga" And Combo11.Text = "" Or Combo3.Text = "Carga uniforme" And Combo7.Text = "" And Combo11.Text = "Sin carga" Then
        Picture72(2).Visible = True
        Picture81(0).Visible = True
        End If
        '
CASO 1º B
        
If Combo3.Text "Carga uniforme" And Combo7.Text "Carga uniforme" And Combo11.Text "Sin carga" Or Combo3.Text "Carga uniforme" And Combo7.Text "Carga uniforme" And Combo11.Text "" Then
        Picture72
(2).Visible True
        Picture81
(0).Visible True
        End 
If
        
'CASO 1º C
        If Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga uniforme" And Combo11.Text = "Carga uniforme" Then
        Picture72(2).Visible = True
        Picture81(0).Visible = True
        End If
        '
CASO 2º A
        
If Combo3.Text "Carga uniforme" And Combo7.Text "Carga puntual" And Combo11.Text "Sin carga" Or Combo3.Text "Carga uniforme" And Combo7.Text "Carga puntual" And Combo11.Text "" Then
            
If Val(Form8.Text1) = Or Val(Form8.Text1) = Val(Form2.Text2Then
            Picture72
(2).Visible True
            Picture81
(0).Visible True
            End 
If
            If 
Val(Form8.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) > 0 Then
            Picture72
(22).Visible True
            Picture81
(5).Visible True
            End 
If
            If 
Val(Form8.Text1) = ((Val(Form2.Text2)) / 2Then
            Picture72
(18).Visible True
            Picture81
(4).Visible True
            End 
If
            If 
Val(Form8.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) < Val(Form2.Text2Then
            Picture72
(26).Visible True
            Picture81
(6).Visible True
            End 
If
        
End If
        
'CASO 2º C
        If Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga uniforme" And Combo11.Text = "Carga puntual" Then
            If Val(Form12.Text1) = 0 Or Val(Form12.Text1) = Val(Form2.Text2) Then
            Picture72(2).Visible = True
            Picture81(0).Visible = True
            End If
            If Val(Form12.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form12.Text1) > 0 Then
            Picture72(22).Visible = True
            Picture81(5).Visible = True
            End If
            If Val(Form12.Text1) = ((Val(Form2.Text2)) / 2) Then
            Picture72(18).Visible = True
            Picture81(4).Visible = True
            End If
            If Val(Form12.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form12.Text1) < Val(Form2.Text2) Then
            Picture72(26).Visible = True
            Picture81(6).Visible = True
            End If
        End If
        '
CASO 3º A
        
If Combo3.Text "Carga puntual" And Combo7.Text "Sin carga" And Combo11.Text "Sin carga" Or Combo3.Text "Carga puntual" And Combo7.Text "" And Combo11.Text "" Or Combo3.Text "Carga puntual" And Combo7.Text "Sin carga" And Combo11.Text "" Or Combo3.Text "Carga puntual" And Combo7.Text "" And Combo11.Text "Sin carga" Then
            
If Val(Form4.Text1) = Or Val(Form4.Text1) = Val(Form2.Text2Then
            End 
If
            If 
Val(Form4.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form4.Text1) > 0 Then
            Picture72
(10).Visible True
            Picture81
(2).Visible True
            End 
If
            If 
Val(Form4.Text1) = ((Val(Form2.Text2)) / 2Then
            Picture72
(6).Visible True
            Picture81
(1).Visible True
            End 
If
            If 
Val(Form4.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form4.Text1) < Val(Form2.Text2Then
            Picture72
(14).Visible True
            Picture81
(3).Visible True
            End 
If
        
End If
    
End If
    
'CASO SEGUNDO
    If Combo1.Text = 2 And Check2.Value = 1 Or Combo1.Text = 3 Or Combo1.Text = 4 Then
        '
CASO 1º A
        
If Combo3.Text "Carga uniforme" And Combo7.Text "Sin carga" And Combo11.Text "Sin carga" Or Combo3.Text "Carga uniforme" And Combo7.Text "" And Combo11.Text "" Or Combo3.Text "Carga uniforme" And Combo7.Text "Sin carga" And Combo11.Text "" Or Combo3.Text "Carga uniforme" And Combo7.Text "" And Combo11.Text "Sin carga" Then
        Picture72
(3).Visible True
        Picture81
(0).Visible True
        End 
If
        
'CASO 1º B
        If Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga uniforme" And Combo11.Text = "Sin carga" Or Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga uniforme" And Combo11.Text = "" Then
        Picture72(3).Visible = True
        Picture81(0).Visible = True
        End If
        '
CASO 1º C
        
If Combo3.Text "Carga uniforme" And Combo7.Text "Carga uniforme" And Combo11.Text "Carga uniforme" Then
        Picture72
(3).Visible True
        Picture81
(0).Visible True
        End 
If
        
'CASO 2º A
        If Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga puntual" And Combo11.Text = "Sin carga" Or Combo3.Text = "Carga uniforme" And Combo7.Text = "Carga puntual" And Combo11.Text = "" Then
            If Val(Form8.Text1) = 0 Or Val(Form8.Text1) = Val(Form2.Text2) Then
            Picture72(3).Visible = True
            Picture81(0).Visible = True
            End If
            If Val(Form8.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) > 0 Then
            Picture72(23).Visible = True
            Picture81(5).Visible = True
            End If
            If Val(Form8.Text1) = ((Val(Form2.Text2)) / 2) Then
            Picture72(17).Visible = True
            Picture81(4).Visible = True
            End If
            If Val(Form8.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) < Val(Form2.Text2) Then
            Picture72(27).Visible = True
            Picture81(6).Visible = True
            End If
        End If
        '
CASO 2º C
        
If Combo3.Text "Carga uniforme" And Combo7.Text "Carga uniforme" And Combo11.Text "Carga puntual" Then
            
If Val(Form12.Text1) = Or Val(Form12.Text1) = Val(Form2.Text2Then
            Picture72
(3).Visible True
            Picture81
(0).Visible True
            End 
If
            If 
Val(Form12.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form12.Text1) > 0 Then
            Picture72
(23).Visible True
            Picture81
(5).Visible True
            End 
If
            If 
Val(Form12.Text1) = ((Val(Form2.Text2)) / 2Then
            Picture72
(17).Visible True
            Picture81
(4).Visible True
            End 
If
            If 
Val(Form12.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form12.Text1) < Val(Form2.Text2Then
            Picture72
(27).Visible True
            Picture81
(6).Visible True
            End 
If
        
End If
        
CASO 3º A
        
If Combo3.Text "Carga puntual" And Combo7.Text "Sin carga" And Combo11.Text "Sin carga" Or Combo3.Text "Carga puntual" And Combo7.Text "" And Combo11.Text "" Or Combo3.Text "Carga puntual" And Combo7.Text "Sin carga" And Combo11.Text "" Or Combo3.Text "Carga puntual" And Combo7.Text "" And Combo11.Text "Sin carga" Then
            
If Val(Form4.Text1) = Or Val(Form4.Text1) = Val(Form2.Text2Then
            End 
If
            If 
Val(Form4.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form4.Text1) > 0 Then
            Picture72
(11).Visible True
            Picture81
(2).Visible True
            End 
If
            If 
Val(Form4.Text1) = ((Val(Form2.Text2)) / 2Then
            Picture72
(7).Visible True
            Picture81
(1).Visible True
            End 
If
            If 
Val(Form4.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form4.Text1) < Val(Form2.Text2Then
            Picture72
(15).Visible True
            Picture81
(3).Visible True
            End 
If
        
End If
    
End If
End Sub 
  #2 (permalink)  
Antiguo 05/08/2008, 13:13
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 10 meses
Puntos: 7
Respuesta: código que no funciona para mostrar imégenes

Hola!

Peazo código!

Le he echado un ojo y mejor que buscar dónde falla, te voy a dar algunos consejillos que van a hacer que rutinas tan complejas sean más legibles y eficaces, y te resulte más fácil encontrar este tipo de errores:

- En primer lugar, no utilices la propiedad Text de los ComboBoxes para comprobar nada. Imagina que pasado mañana en lugar de "Carga Uniforme" tienes que poner otra cosa (o traducirlo a otro idioma)... ya tendrías que cambiar mucho código. Probablemente incluso tu problema esté ahí. En su lugar, utiliza la propiedad ItemData: en las Combos y en las ListBoxes, hay tantos elementos en ItemData (es un array) como haya en List, de hecho, puedes también introducirlos en tiempo de diseño, pero si quieres llenarlas por código es algo así:

Código:
   With Combo1
        Call .AddItem("Carga uniforme")
        .ItemData(.NewIndex) = 0
        Call .AddItem("Carga puntual")
        .ItemData(.NewIndex) = 1
        .... ' ad infinitum =]
    End With
De esta forma, comprobar qué valor hay es tan sencillo como:

Código:
    If Combo1.ItemData(Combo1.ListIndex) = 0 Then...
Puedes hacerlo aún más legible definiendo constantes o enumeraciones para los distintos valores. De hecho, te recomendaría que te acostumbraras a ello . Por ejemplo, para tu caso:

Código:
Public Enum TipoCargaConst
    TC_Vacio = 0
    TC_SinCarga = 1
    TC_Uniforme = 2
    TC_Puntual = 4     ' Progresión geométrica, estaba pensando en hacer otro truco, pero para el caso actual, da igual los valores que pongas aquí =]
End Enum

Private Sub Form_Load()
    With Combo1
        .Clear
        Call .AddItem("-")
        .ItemData(.NewIndex) = TC_Vacio
        Call .AddItem("Sin Carga")
        .ItemData(.NewIndex) = TC_SinCarga
        Call .AddItem("Carga uniforme")
        .ItemData(.NewIndex) = TC_Uniforme
        Call .AddItem("Carga puntual")
        .ItemData(.NewIndex) = TC_Puntual
       
        .ListIndex = 0
    End With
End Sub
Y para comprobar lo que quieras, lo harías así (se ve la diferencia, verdad? ):
Código:
    If Combo1.ItemData(Combo1.ListIndex) = TC_Uniforme Then ...
Y si un día tienes que cambiar la descripción, la cambias una única vez y en un único sitio.

- Cuando tengas que hacer comprobaciones encadenadas, utiliza la estructura Select Case... End Select. Te reescribo el principio de tu función para que te hagas una idea de cómo quedaría:

Código:
Private Sub codigomomentosvano2()
'A PARTIR DE AQUÍ SON LAS IMÁGENES DE LOS MOMENTOS
Dim i As Integer
Dim m As Integer

    For i = 0 To 27
        picture72(i).Visible = False
    Next
    For m = 0 To 6
        picture81(m).Visible = False
    Next

    'CASO PRIMERO
    If Combo1.Text = 2 And Check2.Value = 0 Then
        'CASO 1º A
        Select Case combo3.ItemData(combo3.ListIndex)
            Case TC_Uniforme:   ' Valor en Combo3
                Select Case combo7.ItemData(combo7.ListIndex)
                    Case TC_Vacio, TC_SinCarga, TC_Uniforme: ' Cualquiera de los tres vale para este caso
                        If combo11.ItemData(combo11.ListIndex) = TC_Vacio Or combo11.ItemData(combo11.ListIndex) = TC_SinCarga Then
                            picture72(2).Visible = True
                            picture81(0).Visible = True
                        End If
                    Case TC_Puntual:
                        If combo11.ItemData(combo11.ListIndex) = TC_Vacio Or combo11.ItemData(combo11.ListIndex) = TC_SinCarga Then
                            If Val(Form8.Text1) = 0 Or Val(Form8.Text1) = Val(Form2.Text2) Then
                                picture72(2).Visible = True
                                picture81(0).Visible = True
                            ElseIf Val(Form8.Text1) < ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) > 0 Then
                                picture72(22).Visible = True
                                picture81(5).Visible = True
                            ElseIf Val(Form8.Text1) = ((Val(Form2.Text2)) / 2) Then
                                picture72(18).Visible = True
                                picture81(4).Visible = True
                            ElseIf Val(Form8.Text1) > ((Val(Form2.Text2)) / 2) And Val(Form8.Text1) < Val(Form2.Text2) Then
                                picture72(26).Visible = True
                                picture81(6).Visible = True
                            End If
                End Select
            Case TC_Puntual:    ' Valor en combo3
                Select Case combo7.ItemData(combo7.ListIndex)
                    case ...
                End Select
            case ...
        End Select
    End If
End Sub
La función sería mucho mas larga porque el propio algoritmo requiere muchas comprobaciones, pero fíjate que ya parece más fácil de seguir, ¿verdad?

Observa que he utilizado también la estructura If... ElseIf ... End If. Es similar a Select Case ... End Select, pero legible a su manera. La idea detrás de esto es que si el programa comprueba una de las opciones y es verdadera, las demás no se van a ejecutar, así que sobra comprobarlas.

- Acostúmbrate también a dar un nombre descriptivo a los controles. "picMomento" es más fácil de seguir que "Picture1"... a mí también me da pereza a veces, no te creas, pero a la larga se acaba agradeciendo

- Y como truquillos, define las variables para contadores y esas cosas como Long, no como Integer. Long utiliza 32 bits, mientras que Integer sólo usa 16: los sistemas Windows 2000 y superiores están optimizados para trabajar con Longs y el código puede acelerarse si los utilizas intensivamente.

Espero no haberte apabullado mucho con todo esto, pero he deducido del código que tú vales para esto, así que ¡ánimo!, y si tienes cualquier duda, pregunta sin miedo
__________________
wile sona li mute e sona
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:50.