Visual Basic - Comportamiento extraño IF en VB 6.0

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Comportamiento extraño IF en VB 6.0

Publicado por Lucas (2 intervenciones) el 10/03/2017 02:06:53
Hola a todos, soy nuevo en la pagina, eh estado leyendo mucho aca para ayudar a recordar como iba todo esto pero parece que llego la hora de pedir ayuda especificamente.
Tengo problemas con un IF a la hora de comparar 2 variables y ordenarlas de mayor a menos, junto a otras variables asociadas.. dejo el codigo e intento explicar abajo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
If Tabla.Mob2Ini.Caption > Tabla.Mob1Ini.Caption Then  ' Compara 2 Integer
        NombreSlot1 = Tabla.Mob1.Caption    'Guarda primer set de variables para acomodar
        HpSlot1 = Tabla.Mob1Hp.Caption
        IniSlot1 = Tabla.Mob1Ini.Caption
        NombreSlot2 = Tabla.Mob2.Caption   'Guarda segundo set de variables para acomodar
        HpSlot2 = Tabla.Mob2Hp.Caption
        IniSlot2 = Tabla.Mob2Ini.Caption
        Tabla.Mob1.Caption = NombreSlot2  ' Reescribo primer set de variables x el segundo
        Tabla.Mob1Hp.Caption = HpSlot2
        Tabla.Mob1Ini.Caption = IniSlot2
        Tabla.Mob2.Caption = NombreSlot1 ' Reescribo segundo set de variables x el primero
        Tabla.Mob2Hp.Caption = HpSlot1
        Tabla.Mob2Ini.Caption = IniSlot1
        NombreSlot1 = "" ' Limpieza variables
        HpSlot1 = 0
        IniSlot1 = 0
        NombreSlot2 = ""
        HpSlot2 = 0
        IniSlot2 = 0
    ElseIf Tabla.Mob1Ini.Caption = Tabla.Mob2Ini.Caption Then   ' En caso de que los 2 valores sean iguales
        If Tabla.Mob2Hp.Caption > Tabla.Mob1Hp.Caption Then    ' Comparo los por Hp
            NombreSlot1 = Tabla.Mob1.Caption
            HpSlot1 = Tabla.Mob1Hp.Caption
            IniSlot1 = Tabla.Mob1Ini.Caption ' Asignacion resguardo 1er set
            NombreSlot2 = Tabla.Mob2.Caption
            HpSlot2 = Tabla.Mob2Hp.Caption
            IniSlot2 = Tabla.Mob2Ini.Caption ' Asignacion resguardo 2do set
            Tabla.Mob1.Caption = NombreSlot2 ' Reemplazo de 1 x 2
            Tabla.Mob1Hp.Caption = HpSlot2
            Tabla.Mob1Ini.Caption = IniSlot2
            Tabla.Mob2.Caption = NombreSlot1 ' Reemplazo de 2 x 1
            Tabla.Mob2Hp.Caption = HpSlot1
            Tabla.Mob2Ini.Caption = IniSlot1
            NombreSlot1 = "" ' Limpieza variables
            HpSlot1 = 0
            IniSlot1 = 0
            NombreSlot2 = ""
            HpSlot2 = 0
            IniSlot2 = 0
        End If
    End If

Disculpen el caos pero no programaba desde la secundaria y estoy oxidado. El problema esta en los Ini.Caption de los IF. Hay veces que la condicion se cumple pero no entra al IF, como tambien hay veces que no cumple la condicion pero ingresa igual al IF, cambiando las variables de lugar cuando no deberia.

Por momentos anda bien y por momentos anda mal, la verdad no se que esta mal. Estuve viendo paso a paso y hay casos en que ocurre Mob2Ini (5) > Mob1Ini (15) y cambia de lugar cuando no deberia.

Desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Comportamiento extraño IF en VB 6.0

Publicado por Lucas (2 intervenciones) el 10/03/2017 03:27:35
Segui probando y acomodando el codigo dejando esto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
If Tabla.Mob1Ini.Caption <= Tabla.Mob2Ini.Caption Then
        If Tabla.Mob1Ini.Caption = Tabla.Mob2Ini.Caption Then
            If Tabla.Mob2Hp.Caption > Tabla.Mob1Hp.Caption Then
                NombreSlot1 = Tabla.Mob1.Caption
                HpSlot1 = Tabla.Mob1Hp.Caption
                IniSlot1 = Tabla.Mob1Ini.Caption ' Asignacion resguardo 1
                NombreSlot2 = Tabla.Mob2.Caption
                HpSlot2 = Tabla.Mob2Hp.Caption
                IniSlot2 = Tabla.Mob2Ini.Caption ' Asignacion resguardo 2
                Tabla.Mob1.Caption = NombreSlot2 ' Reemplazo de 1 x 2
                Tabla.Mob1Hp.Caption = HpSlot2
                Tabla.Mob1Ini.Caption = IniSlot2
                Tabla.Mob2.Caption = NombreSlot1 ' Reemplazo de 2 x 1
                Tabla.Mob2Hp.Caption = HpSlot1
                Tabla.Mob2Ini.Caption = IniSlot1
             End If
        Else
        NombreSlot1 = Tabla.Mob1.Caption
        HpSlot1 = Tabla.Mob1Hp.Caption
        IniSlot1 = Tabla.Mob1Ini.Caption ' Asignacion resguardo 1
        NombreSlot2 = Tabla.Mob2.Caption
        HpSlot2 = Tabla.Mob2Hp.Caption
        IniSlot2 = Tabla.Mob2Ini.Caption ' Asignacion resguardo 2
        Tabla.Mob1.Caption = NombreSlot2 ' Reemplazo de 1 x 2
        Tabla.Mob1Hp.Caption = HpSlot2
        Tabla.Mob1Ini.Caption = IniSlot2
        Tabla.Mob2.Caption = NombreSlot1 ' Reemplazo de 2 x 1
        Tabla.Mob2Hp.Caption = HpSlot1
        Tabla.Mob2Ini.Caption = IniSlot1
        End If
    End If

Esto seria para una sola comparacion, cuando tengo que comparar 18 numeros (Si, hice 18 IF iguales) y agregandole un FOR por la cantidad de numeros que necesito, lo hice repetir para acomodarlos y de a momentos va bien hasta que los IF empiezan a hacer lo que quieren.. Baje un 1 desde la segunda posicion hasta el final de la tabla pero despues cambia el 18 de la primera posicion por un 16 y luego por un 5... Ni idea de lo que esta pasando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 200
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Comportamiento extraño IF en VB 6.0

Publicado por Juan Gilberto (323 intervenciones) el 10/03/2017 18:07:35
Cuando yo necesito acomodar numeros o textos utilizo un recordst de ado o un ListView control ya que ambos tiene la capacidad de ordenar facilmente lo que guardes en ellos
Pueden ser invisibles
y me evito la bola de comparaciones etc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar