Visual Basic - Ayuda, el maula anda suelto!

Life is soft - evento anual de software empresarial
   
Vista:

Ayuda, el maula anda suelto!

Publicado por Facundo (58 intervenciones) el 30/06/2014 06:01:47
Hola gente,
recurro a ustedes por algo que no puedo terminar de creer:

Tengo en un Form, 12 elementos Label.
Mi idea es que al presionar cada una de las teclas de función (de 1 al 12), vaya cambiando el color de las etiquetas (Label), para lo cual el código es el que sigue:

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
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
    Case 112
        If Label1.BackColor = vbRed Then Label1.BackColor = vbGreen Else Label1.BackColor = vbRed
    Case 113
        If Label2.BackColor = vbRed Then Label2.BackColor = vbGreen Else Label2.BackColor = vbRed
    Case 114
        If Label3.BackColor = vbRed Then Label3.BackColor = vbGreen Else Label3.BackColor = vbRed
    Case 115
        If Label4.BackColor = vbRed Then Label4.BackColor = vbGreen Else Label4.BackColor = vbRed
    Case 116
        If Label5.BackColor = vbRed Then Label5.BackColor = vbGreen Else Label5.BackColor = vbRed
    Case 117
        If Label6.BackColor = vbRed Then Label6.BackColor = vbGreen Else Label6.BackColor = vbRed
    Case 118
        If Label7.BackColor = vbRed Then Label7.BackColor = vbGreen Else Label7.BackColor = vbRed
    Case 119
        If Label8.BackColor = vbRed Then Label8.BackColor = vbGreen Else Label8.BackColor = vbRed
    Case 120
        If Label9.BackColor = vbRed Then Label9.BackColor = vbGreen Else Label9.BackColor = vbRed
    Case 121
        If Label10.BackColor = vbRed Then Label10.BackColor = vbGreen Else Label10.BackColor = vbRed
    Case 122
        If Label11.BackColor = vbRed Then Label11.BackColor = vbGreen Else Label11.BackColor = vbRed
    Case 123
        If Label12.BackColor = vbRed Then Label12.BackColor = vbGreen Else Label12.BackColor = vbRed
        Print Form1.KeyPreview
End Select
End Sub

La sorpresa viene ahora:
Apretando las teclas de función F1 a F9, F11 y F12 el código funciona sin problemas.
Cuando apreto F10 una vez es como si se detuviera la intercepción de teclas presionadas; solamente tras apretar F10 nuevamente, el programa vuelve a funcionar.
Una cosa que descarté es que F10 pusiera en False a Form1.KeyPreview; ése no es el caso.
Agradeceré al que pueda explicar este comportamiento.
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
Imágen de perfil de Oscar

Ayuda, el maula anda suelto!

Publicado por Oscar (63 intervenciones) el 30/06/2014 09:54:16
Esto te ocurre en modo desarrollo o en la ejecución del .exe.

Por cierto yo hubiera usado un array de controles Label te hubiera quedado el codigo mucho más corto y manejable, ejem..

1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim ind as integer
 
     ind = KeyCode - 112
     If ind >= 0 And ind <= 11 Then
             If Label(ind).BackColor = vbRed Then
                    Label(ind).BackColor = vbGreen
                    Else
                    Label(ind).BackColor = vbRed
             End If
     End If
     If ind = 11 Then Print Form1.KeyPreview
End Sub
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

Ayuda, el maula anda suelto!

Publicado por Facundo (58 intervenciones) el 30/06/2014 12:55:04
Si, muy buena la optimización. La voy a usar. Gracias por el aporte!
De todas formas, la idea de tener un CASE para cada KeyCode es porque quiero que cada tecla de función ejecute una acción distinta, además de cambiar de color el Label.
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