VB: Vilken tanget trycktes ner?

Permalänk
Medlem

VB: Vilken tanget trycktes ner?

Hejsan, försöker ta reda på vilken av alla tangenter som trycktes ner i Visual Basic. Vet att det går på något vis men mina googlingar ger inga resultat.

Jag vill att när jag trycker på valfri tangent så kommer det upp ett medelande som säger vilket nummer tangenten har.

Typ såhär:

Private Sub Form4_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown msgbox ((vilken tangent som trycktes ner) trycktes ner )

Håller nämligen på med ett litet spel där jag vill att man ska kunna byta kontroller.

Permalänk

jag använde mig av något sånt här förut.

Button Press = (Button)sender; string Knapp = Press.Text;

vet inte om det var de du letade efter men hoppas den gör nytta

Permalänk
Medlem
Skrivet av unstoppable:

jag använde mig av något sånt här förut.

Button Press = (Button)sender; string Knapp = Press.Text;

vet inte om det var de du letade efter men hoppas den gör nytta

Jag använder Visual basic express och där är det en helt annan uppbyggnad på koden. Tex så avslutar man inte en rad med ;

Permalänk
Medlem

kika på e.KeyCode.
KeyEventArgs.KeyCode

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

Kan redan använda tangentbordtrycknigar! Men jag vill veta vilken av alla ~250 tangenter man tryckte ner. Håller nämligen på med ett spel där man ska kunna ändra kontroller och att köra if keycode = keys.(tangent) är ju helt otänkbart, tar alldeles för lång tid.

Permalänk
Medlem

skapa ett gäng keyvariablar, vet inte vad dem heter, men kan tänka mig att de är intar, typ
int MoveForwardKey = key.w

sen kollar du
if (keycode == MoveForwardKey)

borde väl gå?

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk
Medlem
Skrivet av kobb3:

Kan redan använda tangentbordtrycknigar! Men jag vill veta vilken av alla ~250 tangenter man tryckte ner. Håller nämligen på med ett spel där man ska kunna ändra kontroller och att köra if keycode = keys.(tangent) är ju helt otänkbart, tar alldeles för lång tid.

jag menade att e.KeyCode innehåller information om vilken tangent som trycktes.
testa följande:

Private Sub Form4_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown MessageBox.Show(e.KeyCode) ' eller MessageBox.Show(e.KeyCode.ToString()) om du vill se "namnet" istället för värdet. ' End Sub

här följer ett litet exempel på hur du skulle kunna kontrollera vilken knapp som tryckts.
att ändra variablerna till andra knappar överlåter jag som övning till dig.

Private MyUpKey As Keys = Keys.W Private MyDownKey As Keys = Keys.S Private MyRightKey As Keys = Keys.D Private MyLeftKey As Keys = Keys.A Private Sub Form4_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown Select Case e.KeyCode Case MyUpKey MessageBox.Show("upp!") Case MyDownKey MessageBox.Show("ner!") Case MyRightKey MessageBox.Show("höger!") Case MyUpKey MessageBox.Show("vänster!") End Select End Sub

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

jag menade att e.KeyCode innehåller information om vilken tangent som trycktes.
testa följande:

Private Sub Form4_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown MessageBox.Show(e.KeyCode) ' eller MessageBox.Show(e.KeyCode.ToString()) om du vill se "namnet" istället för värdet. ' End Sub

här följer ett litet exempel på hur du skulle kunna kontrollera vilken knapp som tryckts.
att ändra variablerna till andra knappar överlåter jag som övning till dig.

Private MyUpKey As Keys = Keys.W Private MyDownKey As Keys = Keys.S Private MyRightKey As Keys = Keys.D Private MyLeftKey As Keys = Keys.A Private Sub Form4_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown Select Case e.KeyCode Case MyUpKey MessageBox.Show("upp!") Case MyDownKey MessageBox.Show("ner!") Case MyRightKey MessageBox.Show("höger!") Case MyUpKey MessageBox.Show("vänster!") End Select End Sub

Tackar! Var verkligen simpelt!

Fick det inte att fungera i början då jag av någon anledning var tvungen att slå på keypreview först! Fungerade inte att använda tangentbordet där annars, skumt med tanke på att form1 har den avslagen.

Nu fungerar det i alla fall!

Kan redan ändra allt annat Men tack ändå

Permalänk
Medlem

Någon som har en aning om hur jag konverterar ett nummer på en tangent till vilken tangent det är? Exempelvis har jag nummer 87 och vill få reda på att det är W. Det ska alltså ske helt automatiskt och jag har en Integer med nummret på.

e.keycode.tostring() fungerar inte eftersom jag bara har en Integer med numret, det sker ingen knapptryckning och därför fungerar inte e.keycode.tostring().

Permalänk
Medlem

Casta om värde till char så borde det fungera.

Permalänk
Medlem
Skrivet av Garret:

Casta om värde till char så borde det fungera.

Men hur? Hittar ingen kod som verkligen fungerar!

Permalänk
Medlem

Dim sKeyName As String = [Enum].GetName(GetType(Keys), 87)

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

Dim sKeyName As String = [Enum].GetName(GetType(Keys), 87)

Woohoo! Hade aldrig lyckats klura ut det där!

Tackar!