Besturing in Visual Basic 2010

Status
Niet open voor verdere reacties.

JaccoVE

Gebruiker
Lid geworden
27 feb 2013
Berichten
33
Ik wil graag door middel van de pijltjestoetsen een robot kunnen besturen. Ik heb al voor elkaar dat de robot rijdt door op de button's te klikken. Maar ik wil graag dat je die button's kunt indrukken door de pijltjestoetsen in te drukken. Heeft iemand een idee hoe zoiets moet? Zie foto hieronder voor de duidelijkheid.

Alvast bedankt

besturing.jpg
 
wat lukt er precies niet? de toetsen afvangen? koppelen van toetsen aan buttons?
 
Het lukt me niet om te zorgen dat als ik bijvoorbeeld de pijltjestoets naar links indruk op het toetsenbord, dat dan ook de button links (zie foto) wordt ingedrukt.
 
Kort gezegd: pijltje naar links op het toetsenbord indrukken = button naar links in programma indrukken
 
Ik heb nu het volgende:

Code:
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
        If msg.WParam.ToInt32() = CInt(Keys.Left) Then
            SendKeys.Send("{Tab}")
            Return True
        End If
        Return MyBase.ProcessCmdKey(msg, keyData)
End Function

Als ik nu pijltje naar links druk op het toetsenbord, dan is dat het zelfde als de Tab toets indrukken. Maar ik wil dan dat die niet de de Tab toets indrukt, maar dat hij op een button klikt in mijn programma. Hoe moet dit?
 
Laatst bewerkt door een moderator:
Nee, je moet aan zoiets denken:

[cpp]Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Left Then
''//code
End If
End Sub[/cpp]
 
Sorry, lag aan mij, ik keek op m'n iPod en daar zag ik niks op staan, maar op me pc wel.
 
Hoi,

Je zou dit kunnen gebruiken:
Code:
Button1.PerformClick()
Maar je moet dan nog wel wat verzinnen voor als de knop naar beneden gehouden wordt.

MartinJM
 
Laatst bewerkt:
Ik heb nu de code van JoZ1 gebruikt en dan op de plek van "code" heb ik de zelfde code gezet als ik had bij de code van de button links. Zie voorbeeld:
Code:
Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
        If e.KeyCode = Keys.Left Then
            Dim byteOut(64) As Byte
            Dim i As Integer
            Try
                byteOut(0) = Len("Links") + 5  'number bytes in output message
                byteOut(1) = &H0  'should be 0 for NXT
                byteOut(2) = &H80 '&H0 = reply expected &H80 = no reply expected
                byteOut(3) = &H9  'Send Bluetooth
                byteOut(4) = &H1  'Box Number - 1
                byteOut(5) = Len("Links") + 1  'message size with null terminator
                For i = 1 To Len("Links") 'copy bytes into output array
                    byteOut(i + 5) = Asc(Mid("Links", i, 1))
                Next
                byteOut(Len("Links") + 6) = &H0 'add null terminator
                SerialPort1.Write(byteOut, 0, Len("Links") + 7) 'send message
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End If
    End Sub

Alleen nu heb ik nog het probleem dat als ik op het toetsenbord op pijltje naar links klik dat de focus van de button een plek verschuift. Hoe los ik dit op? Want nu gebeurt er niks.
 
Hoi,

Ik heb er net ook naar gekeken, en had een voorbeeldje gemaakt, maar die is te groot om hier te uploaden....

De code van het voorbeeld:
[CPP]Public Class Form1

Private BLinks, BRechts, BRechtdoor, BAchteruit As Boolean

Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
BtnLinks.FlatStyle = FlatStyle.Standard
BtnRechts.FlatStyle = FlatStyle.Standard
BtnRechtdoor.FlatStyle = FlatStyle.Standard
BtnAchteruit.FlatStyle = FlatStyle.Standard
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.KeyPreview = True
End Sub

Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
KeyAction(keyData)
End Function

Private Sub KeyAction(ByVal Key As Keys)
If Key = Keys.Left Then
BtnLinks.PerformClick()
BtnLinks.FlatStyle = FlatStyle.Flat
Else
BtnLinks.FlatStyle = FlatStyle.Standard
End If

If Key = Keys.Right Then
BtnRechts.PerformClick()
BtnRechts.FlatStyle = FlatStyle.Flat
Else
BtnRechts.FlatStyle = FlatStyle.Standard
End If

If Key = Keys.Up Then
BtnRechtdoor.PerformClick()
BtnRechtdoor.FlatStyle = FlatStyle.Flat
Else
BtnRechtdoor.FlatStyle = FlatStyle.Standard
End If

If Key = Keys.Down Then
BtnAchteruit.PerformClick()
BtnAchteruit.FlatStyle = FlatStyle.Flat
Else
BtnAchteruit.FlatStyle = FlatStyle.Standard
End If
End Sub

Private Sub BtnRechtdoor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRechtdoor.Click
Label1.Text += 1
End Sub

Private Sub BtnLinks_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLinks.Click
Label2.Text += 1
End Sub

Private Sub BtnAchteruit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAchteruit.Click
Label3.Text += 1
End Sub

Private Sub BtnRechts_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRechts.Click
Label4.Text += 1
End Sub
End Class
[/CPP]

Succes!
MartinJM

[edit]
Een nadeel is dat je niet 2 knoppen tegelijk in kan drukken....
[/edit]
 
Volgens mij werkt het bovenstaande wel, want de knoppen lichten op. Er komt alleen nog een streepje onder "End Function" te staan. Is dit erg? Zie hier onder:

Code:
Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
        KeyAction(keyData)
    End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan