Para los que entiden de APIs y me quieran ayudar

20/09/2005 - 20:25 por Luc | Informe spam
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

#1 Carlos Gómez
21/09/2005 - 07:24 | Informe spam
"Luc" <j> wrote:

Private Sub TextBox1_KeyDown (ByVal sender As Object, _
ByVal e As KeyEventArgs) _
Handles TextBox1.KeyDown, TextBox2.KeyDown, TextBox3.KeyDown

Select case e.KeyValue
Case Keys.Enter,Keys.Down,Keys.Add
SendKeys.Send("{TAB}")
e.Handled=True
Case Keys.Up
SendKeys.Send("+{TAB}")
e.Handled=True
End Select

End Sub

Preguntas similares