Hay 4 formas de solucionarlo, pero mejor te lo explico...
El formulario, es un contenedor y como casi todos los contenedores implementa una funcionalidad para recibir el foco (la propiedad causesvalidation y por tanto el evento validate, pertenecen también a esta interfaz).
Ahora bien cuando un contenedor no implementa dicha funcionalidad, no puede retener el foco pero si uno de sus controles contenidos si se 'gana' el foco.
Éste es precisamente el caso del frame, el frame es un contenedor que no implementa la funcionalidad de foco (en realidad no es exactamente así, si implementa funcionalidad de foco, pero la enmascara, lo que para el caso es casi lo mismo que si no la tuviera) , porque está concebido como un contenedor ligero con la única finalidad de agrupar y mantener ordenados los controles, por eso tampoco incluye otras propiedades como picture ni eventos de teclado (aunque si los de ratón).... el frame lo que hace es repartir el foco entre los controles, sin salirse del contenedor si usamos las teclas... No es todo, luego vamos más a ello.
Te ha dado la curiosa e infrecuente coincidencia de que sólo tienes un control más que precisamente tiene la propiedad tabindex a 0. cuando se carga un formulario el control que tiene el foco es aquel que tiene la propiedad tabindex más baja, además mediante la propiedad tabindex podemos pasar el foco de un control a otro, usando precisamente la tecla 'Tab' (tabulador) que va pasando de índice a indice. Dentro de cada contenedor, siempre hay un control que es el que recibe el foco por defecto, esto complica un poco la forma en que el tabulador se mueve... el caso es, que si el contenedor puede recibir el foco (el frame ya hemos dicho que no, pero un picture, si) y éste tiene controles, el tabulador irá primero al control que tiene seleccionado por defecto si tiene el tabindex menor que el contenedor y luego al contenedor y luego se irá a otro contenedor, es decir el contenedor actúa como 1 sólo control si no puede recibir el foco o como 2 si puede recibir el foco... como tu pregunta no va por aquí, no me extiendo más sobre el tema salvo que alguien quiera saber más sobre ello...
Dadas esas coincidencias paso a explicarte las 4 soluciones: antes que nada si el formulario tiene controles, y queremos usar teclas sobre el propio contenedor (el formulario) debemos establecer la propiedad KeyPreview a true, esto le dice al formulari oque los eventos de teclado primero los envíe al formulario para procesarlos y luego a los controles, si no se hace esto se manda la pulsación de tecla como un evento de teclado del control que tiene el foco... digamos que esta es la manera que tiene el formulario de ganar el foco a través del teclado...
Bien habiendo activado esa propiedad...
Solución 1: mantén pulsada la tecla CTRL y/o ALT y/o Mayúsculas (1 de las 3 o cualquier combinación de ellas a la vez) y sin soltar mientras pulsas las teclas de dirección que has fijado para el cubo. Si sólo pulsas las teclas no hace caso...
Solución 2: añade un picture al formulario, mándale el foco al picture ... ahora ya te 'obedece', sin tener que pulsar combinaciones de teclas.(si no le mandas el foco directamente por código, al pulsar una vez tecla de dirección le estás enviando el foco desde el botón (Cerrar) al picture, por tanto la próxima pulsación es ya efectiva para 'mover el cubo'.
Solución 3: Esta es la más acertada... en vez de 'dibujar' el cubo sobre el formulario dibújalo dentro de un picture, dedícalo exclusivamente para dibujar, no le metas controles... así el foco no se 'pierde' entre los controles
Solución 4: funciona incluso sin tener activada la propiedad keypreview del formulario... el dibujo sigue sobre el formulario pero quien atiende al evento no es el formulario sino un picture... por tanto añade un picture al formulario, pincha sobre él (mándale el foco de la forma que prefieras, utiliza las teclas... todo el código que tienes dentro del evento:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
.... 'el código que tienes aquí...
End Sub
lo cortas y lo pegas al evento del picture
Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
.... 'páslo aquí...
End Sub
Convendría que no metieras entonces nada en ese picture y éste podría tener un tamaño muy pequeño, de tal modo que pareciera más un botón y haciéndose a la idea tal que para poder dibujar hubiera que activar el dibujado, para fomentar esta sensación podrías ayudarlo con algo como el siguiente código...
Private Sub Picture1_GotFocus()
Picture1.BorderStyle = 0
Picture1.BackColor = vbGreen
End Sub
Private Sub Picture1_LostFocus()
Picture1.BorderStyle = 1
Picture1.BackColor = vbRed
Timer1.Enabled = False
End Sub
Si algo te ha resultado confuso, das un aviso, aunque como estoy de vacaciones, posiblemente pasen varios días hasta que vuelva a ojear el foro... y en todo caso será un vistazo rápido...