Newsgroup: it.comp.lang.visual-basic
Titolo: Problema SendKeys

Ciao,
purtroppo devo nuovamente postare...
volevo intercettare il tasto Enter e fare in modo che simulasse il TAB
passando da una casella di testo ad un' altra :
Private sub text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        KeyAscii = 0
        SendKeys ("{TAB}")
    End If
end sub
ma non funziona, mi dice che SendKeys è un tipo e non può essere
utilizzato come espressione.
Nell' ordine dovrei passare da
Casella di testo1
Casella di testo2
Casella combinata1
Casella combinata2
Pulsante
Grazie per il prezioso supporto
Marco

 end sub
Se metti il KeyPreview=True sulla form ti basta questo (l'esempio usa anche
le frecce su/giu):
(In questo modo non lo metti su tutti i controlli)
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Call Key2Move(KeyCode, Shift) 
End Sub
In un modulo:
Public Sub Key2Move(KeyCode As Integer, Shift As Integer)
If Shift = 0 Then 
  If KeyCode = vbKeyUp Then 
    KeyCode = 0
    SendKeys ("+{TAB}"), True
  End If
  If KeyCode = vbKeyDown Or KeyCode = vbKeyReturn Then 
    KeyCode = 0
    SendKeys ("{TAB}"), True
  End If
End If
End Sub

Private sub text1_KeyPress(KeyAscii As Integer)
Dovrebbe essere cosi:
Private sub text1_KeyPress(Index as integer, KeyAscii As Integer)
-- 
Ciao
Geppo 

On 16 Gen, 09:54, "Andrea [Work]"

Scusami ma non funziona; a parte vbKeyUp che non è dichiarato,
continua a darmi errore su SendKeys indicando che è un tipo e non può
essere utilizzato come espressione...
devo forse caricare qualche libreria particolare?
Utilizzare invece il setfocus sul controllo successivo? Su Enter dopo
text1 faccio setfocus su Text2 e così via?
grazie per la pazienza :-)
Marco

 text1 faccio setfocus su Text2 e così via?
No, se metti una casella di testo nel mezzo poi devi rifare tutta la catena
Fai un progetto nuovo, inserisci 2/3 textbox e metti questo codice:
Se non ti funziona non so che dire, usi VB6 vero?
CODICE:
Option Explicit
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Call Key2Move(KeyCode, Shift)
End Sub
Public Sub Key2Move(KeyCode As Integer, Shift As Integer)
  If Shift = 0 Then
    If KeyCode = vbKeyUp Then
      KeyCode = 0
      SendKeys ("+{TAB}"), True
    End If
    If KeyCode = vbKeyDown Or KeyCode = vbKeyReturn Then
      KeyCode = 0
      SendKeys ("{TAB}"), True
    End If
  End If
End Sub
Private Sub Form_Load()
  Me.KeyPreview = True
End Sub

 Se non ti funziona non so che dire, usi VB6 vero?
Vedo che utilizzi *forse* VB2008, DEVI specificarlo sempre.
Per un miniprogettino vb2005 usai questo al keydown delle txt con gli
handles:
		If e.KeyCode   =  keys.Enter or e.KeyCode=keys.Down   Then
			Me.SelectNextControl (sender, True, True, False, True)
		Else
			If e.KeyCode=keys.Up   Then
				Me.SelectNextControl (sender, False, True, False, True)
			End If
		End If
Comunque questa roba si trova in 5min a dir tanto con google.

On 16 Gen, 10:42, "Andrea [Work]"

nulla... stessi errori! uso VB 2008 Express Edition, magari manca
qualcosa
Se non sai come fare è lo stesso ti ringrazio comunque del tentativo
Marco

 ha scritto nel messaggio 
news:a45589ce-4a97-434c...@k1g2000prb.googlegroups.com...
On 16 Gen, 10:42, "Andrea [Work]"
---cut--
nulla... stessi errori! uso VB 2008 Express Edition, magari manca
qualcosa
Allora le cose cambiano.
Se non sai come fare è lo stesso ti ringrazio comunque del tentativo
puoi provare cosi ma non sono certo:
SendKeys.Send ("{tab}")
Marco
-- 
Ciao
Geppo 

 Geppo
Avevo già provato ma nulla, col tasto invio rimane in quella txtbox e
non si muove, posso usare solo TAB...
non saprei proprio...
ciao

 non saprei proprio...
Ma hai provato come ti ho detto poi con :
Me.SelectNextControl 
?

Scusa Andrea ma non avevo visto questo post :
Vedo che utilizzi *forse* VB2008, DEVI specificarlo sempre.
Per un miniprogettino vb2005 usai questo al keydown delle txt con gli
handles:
                If e.KeyCode   =  keys.Enter or e.KeyCode=keys.Down
Then
                        Me.SelectNextControl (sender, True, True,
False, True)
                Else
                        If e.KeyCode=keys.Up   Then
                                Me.SelectNextControl (sender, False,
True, False, True)
                        End If
                End If
probabilmente l' ha caricato dopo o proprio non l' ho visto...
allora, uso VB 2008 Express edition
il codice sopra decritto va messo sul KeyDown della mia casella di
testo?
ho errori di dichiarazione su sender e su "e"
scusa ma sono autodidatta e comincio quasi da zero su VB..
grazie

 scusa ma sono autodidatta e comincio quasi da zero su VB..
Prova su un progetto vuoto.
Con Vb2008 Express questo va:
Public Class Form1
    Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) _
                Handles TextBox1.KeyDown, TextBox2.KeyDown,
TextBox3.KeyDown
        If e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Down Then
            Me.SelectNextControl(sender, True, True, False, True)
        Else
            If e.KeyCode = Keys.Up Then
                Me.SelectNextControl(sender, False, True, False, True)
            End If
        End If
    End Sub
End Class
(incolla 3 text nella forma)