Tengo un código que en VB6 funciona perfectamente y que tras depurar los
cambios de variables, ... en .Net debería funcionar también igual pero no lo
hace.
La cuestión es que lo utilizo para simular la pulsación del TAB y así pasar
al siguiente control o al control anterior a mi antojo y desde cualquier
control.
Pues bien el paso al control siguiente (simulación de la pulsación de TAB)
funciona perfecto pero cuando quiero volver al control anterior (Shift +
TAB) no lo hace.
Todo el problema está en la parte de la función que se ejecuta al capturar
la pulsación de la tecla de la flecha de arriba.
Si a alguien se le ocurre porque que me lo diga.
Gracia
Luc
Codigo:
En un modulo:
Para utilizar la función:
Module Module1
<System.Runtime.InteropServices.DllImport("user32.DLL")> _
Private Function SendMessage( _
ByVal hWnd As System.IntPtr, ByVal wMsg As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer _
) As Integer
End Function
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
(ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, ByVal
lParam As Int32) As Integer
Private Declare Function SetKeyboardState Lib "user32" (ByVal lppbKeyState
As Byte) As Integer
Private Declare Function GetKeyboardState Lib "user32" (ByVal pbKeyState As
Byte) As Integer
Const WM_KEYDOWN = &H100
Const VK_TAB = &H9
Const VK_SHIFT = &H10
Const VK_DELETE = &H2E
Const VK_BACK = &H8
Const VK_LEFT = &H25
Public Sub PasaCampo(ByVal CodigoKey As System.ConsoleKey, ByVal miControl
As Control)
Dim bTeclas() As Byte
ReDim bTeclas(0 To 255)
Select Case CodigoKey
Case ConsoleKey.Enter 'vbKeyReturn
' Mandar mensaje de tabulador
PostMessage(miControl.Handle, WM_KEYDOWN, VK_TAB, 0)
Case ConsoleKey.Add 'vbKeyAdd
' Mandar mensaje de tabulador
PostMessage(miControl.Handle, WM_KEYDOWN, VK_TAB, 0)
Case ConsoleKey.UpArrow ' vbKeyUp
GetKeyboardState(bTeclas(0))
' Simulación de la pulsación de la tecla SHIFT
bTeclas(VK_SHIFT) = True
SetKeyboardState(bTeclas(0))
' Mandar mensaje de tabulador
PostMessage(miControl.Handle, WM_KEYDOWN, VK_TAB, 0)
'DoEvents()
' Liberación de la tecla SHIFT
bTeclas(VK_SHIFT) = False
SetKeyboardState(bTeclas(0))
Case ConsoleKey.DownArrow ' vbKeyDown
PostMessage(miControl.Handle, WM_KEYDOWN, VK_TAB, 0)
Case ConsoleKey.LeftArrow 'vbKeyLeft
'CodigoKey = 0
End Select
End Sub
End Module
Para utilizar la función (en un formulario con 3 textbox):
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown,
TextBox2.KeyDown, TextBox3.KeyDown
Module1.PasaCampo(e.KeyCode, Me)
End Sub
Leer las respuestas