Como paso de un control a otro, en VB6 era así y ahora no se combierte

11/09/2005 - 20:21 por Luc | Informe spam
Hola otra vez a todos,

Intento pasar una aplicación de VB6 a VB 2005 pero no se como es el código
equivalente.

Se trata de pasar de un control a otro pulsando intro, la tecla + o incluso
la flecha hacia adelante. En VB6 lo tengo funcionando sin problemas pero
ahora no funciona en VB 2005 Beta 2.

Saludos
Luc

Adjunto el código de por si alguna alma caritativa me hecha una mano:

'Declaraciones para la función PasaCampo
'-
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
As Long) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As
Byte) As Long
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte)
As Long
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 KeyCodeConstants, miControl As
Control)
Dim bTeclas(0 To 255) As Byte
Select Case CodigoKey
Case vbKeyReturn:
' Mandar mensaje de tabulador
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0
Case vbKeyAdd:
' Mandar mensaje de tabulador
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0

En los formularios para pasar de campo con las teclas que yo quiera, en
cualquier control puedo poner esto:

Private Sub Text_KeyDown(Index As Integer, KeyCode As Integer, Shift As
Integer)

Module1.PasaCampo KeyCode, Screen.ActiveControl

End Sub



Case 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.hwnd, WM_KEYDOWN, VK_TAB, 0
DoEvents
' Liberación de la tecla SHIFT
bTeclas(VK_SHIFT) = False
SetKeyboardState bTeclas(0)
Case vbKeyDown:
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0
Case vbKeyLeft:
'CodigoKey = 0
End Select
End Sub

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
11/09/2005 - 20:46 | Informe spam
"Luc" <j> escribió en el mensaje
news:
Hola otra vez a todos,

Intento pasar una aplicación de VB6 a VB 2005 pero no se como es el código
equivalente.

Se trata de pasar de un control a otro pulsando intro, la tecla + o
incluso la flecha hacia adelante. En VB6 lo tengo funcionando sin
problemas pero ahora no funciona en VB 2005 Beta 2.

Saludos
Luc



Hola.

Puedes usar el equivalente del SendKeys de VB6:
System.Windows.Forms.SendKeys.SendWait("{TAB}")
pero en un par de oportunidades la aplicacion se me ha bloqueado. Al final,
regresé a mi viejo metodo basado en keybd_event:

Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, _
ByVal bVScan As Byte, ByVal dwFlags As Integer, _
ByVal dwExtra As Integer)

Public Shared Sub SendTab()
keybd_event(9, 15, 0, 0)
keybd_event(9, 15, 2, 0)
End Sub

para "sintetizar" el tabulador, luego:

Public Shared Sub TranslateReturn(ch As Char, ac As Control)
If ch = chr(13)
... Un filtro para no "tragarme" los enter de los controles que los
usan
SendTab()
End If
End If

luego, coloco a true la propiedad KeyPreview de las formas, y en el handler
de KeyPressed incluyo

TranslateReturn(e.KeyChar, Me.ActiveControl)

Nunca usé tu método basado en PostMessage, pero imagino que si lo copias
igual a VB.NET podría funcionar.


Salud!
Respuesta Responder a este mensaje
#2 Julio Casal
12/09/2005 - 06:08 | Informe spam
No sé si te sea de ayuda, pero los formularios tienen una propiedad booleana
llamada "KeyPreview". Cuando pones esta propiedad en "True", los eventos del
teclado registrados en los controles de un formulario, se registran también
con el formulario en sí. Así un código como este:

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
MessageBox.Show("Tecla presionada: " & e.KeyCode.ToString)
End Sub

...reaccionaría cada vez que el usuario presione cualquier tecla sobre
cualquier control del formulario.

Espero haber podido ayudarte.

Saludos.

Julio Casal
.Net Solution Developer
MCAD
Grupo Lebed


"Luc" wrote:

Hola otra vez a todos,

Intento pasar una aplicación de VB6 a VB 2005 pero no se como es el código
equivalente.

Se trata de pasar de un control a otro pulsando intro, la tecla + o incluso
la flecha hacia adelante. En VB6 lo tengo funcionando sin problemas pero
ahora no funciona en VB 2005 Beta 2.

Saludos
Luc

Adjunto el código de por si alguna alma caritativa me hecha una mano:

'Declaraciones para la función PasaCampo
'-
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
As Long) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As
Byte) As Long
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte)
As Long
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 KeyCodeConstants, miControl As
Control)
Dim bTeclas(0 To 255) As Byte
Select Case CodigoKey
Case vbKeyReturn:
' Mandar mensaje de tabulador
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0
Case vbKeyAdd:
' Mandar mensaje de tabulador
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0

En los formularios para pasar de campo con las teclas que yo quiera, en
cualquier control puedo poner esto:

Private Sub Text_KeyDown(Index As Integer, KeyCode As Integer, Shift As
Integer)

Module1.PasaCampo KeyCode, Screen.ActiveControl

End Sub



Case 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.hwnd, WM_KEYDOWN, VK_TAB, 0
DoEvents
' Liberación de la tecla SHIFT
bTeclas(VK_SHIFT) = False
SetKeyboardState bTeclas(0)
Case vbKeyDown:
PostMessage miControl.hwnd, WM_KEYDOWN, VK_TAB, 0
Case vbKeyLeft:
'CodigoKey = 0
End Select
End Sub



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida