claro que hay forma de decirle que realice 2 movimientos a la vez, lo que no hay es forma de recibir a la vez info sobre 2 teclas pulsadas de forma directa a la vez... porque lo que en tiempo nuestro 'es a la vez', para el ordenador es un 'tiempo eterno'... Sólo puede procesarse 2 teclas a la vez de forma directa cuando una de estas es de tipo 'optionButton' (como ALT, CTRL y SHIFT) o de tipo 'Chechbox' (como BloqMayus, BloqNum,etc...)
Hay 2 formas de procesar 2 teclas a la vez, 1 sería crearte un minibuffer (una matriz de 2-5 elementos) que se rellena cuando cuando una tecla se pulsa (sería funcionaría como una cola circular, pero obviando el espacio ocupado) y un temporizador que chequea dicho buffer cada cierto tiempo, digamos más humano si 2 teclas distintas se pulsan dentro de un intérvalo pongamos de 150ms. se procesan como 1 unidad de movimiento en la dirección deseada, si las 2 teclas distintas han sucedido en un intérvalo mayor, se procesa sólo la primera de ellas y se deja la siguiente para ver si existe una ocurriencia en el sigiente intérvalo.
No es difícil pero siendo principiante diseñar un búffer temporizado de las características susodichas podría darte ciertos problemas debido a algunas complejidades resultantes más debido posiblemente a las carencias de conocimiento del lenguaje que a otra cosa.
Por elllo yo te propongo otra solución mucho más sencilla que la anterior...
Mira el teclado numérico, si te fijas en las teclas 2,4,8,6 tienen una flecha, tienen idéntico significado a las teclas de cursor que utilizas, con las alvedad, de que sólo se comportan como teclas de cursor cuando está desactivada la tecla 'BloqNum', entonces puedes emplear la tecla '1' para una dirección sur-oeste, la tecla '7' para una dirección noroeste, la tecla '9' para una dirección noreste y la tecla 3 para una dirección sureste. los códigos de estas teclas son: 35,36,34 y 33 respectivamente...
Ahora bien supongamos que quieres usar estas teclas como cursor independientemente del estado de la tecla BloqNum, entonces debes tratar también los códigos de estas teclas que cambian de valor en esta situación (sólo deberías hacerlo si no tienes programado el uso de teclas numéricas para alguna otra acción).. te pongo tecla y valor: t1=97; t2=98 ; t3=99 ; t4=100 ; t6=102 ; t7=102 ; t8=104 y t9=105.
Entonces tu código quedaría algo así como:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
With Me ' ó FrmControl si el formulario a mover es otro que éste en el que se pulsan las teclas...
Select Case KeyCode
Case 37, 100 ' izquierda - oeste
.Left = .Left - movimiento
Case 38, 104 ' arriba - norte
.Top = .Top - movimiento
Case 39, 102 ' derecha - este
.Left = .Left + movimiento
Case 40, 98 ' abajo - sur
.Top = .Top + movimiento
Case 35,97 ' suroeste
Call .Move(.Left - movimiento, .Top + movimiento)
Case 36,103 ' noroeste
Call .Move(.Left - movimiento, .Top - movimiento)
Case 34,99 ' noreste
Call .Move(.Left + movimiento, .Top + movimiento)
Case 33 ,105 ' suoreste
Call .Move(.Left + movimiento, .Top - movimiento)
End Select
End With
End Sub
Como puedes ver esta solución es muy fácil de aplicar y de entender...
Adicionalmente podrías programar la tecla 5, para centrar el formulario en la pantalla...