Problem beim Abfragen von Keys aus einem Array

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Problem beim Abfragen von Keys aus einem Array

    Hey,

    Ich wollte abfragen, wenn z.B KEy.A gedrückt wurde dann mach das und das .... etc... . Und das halt in nem Array mit ner For Next schleife.

    Hier der Code:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    2. Key(0) = Keys.A & Key(1) = Keys.B & Key(2) = Keys.C & Key(3) = Keys.D & Key(4) = Keys.E & Key(5) = Keys.F
    3. Key(6) = Keys.G & Key(7) = Keys.H & Key(8) = Keys.I & Key(9) = Keys.J & Key(10) = Keys.K & Key(11) = Keys.L
    4. Key(12) = Keys.M & Key(13) = Keys.N & Key(14) = Keys.O & Key(15) = Keys.P & Key(16) = Keys.Q & Key(17) = Keys.R
    5. Key(18) = Keys.S & Key(19) = Keys.T & Key(20) = Keys.U & Key(21) = Keys.V & Key(21) = Keys.W & Key(22) = Keys.X
    6. Key(23) = Keys.Y & Key(24) = Keys.Z
    7. Dim i As Integer
    8. For i = 0 To Key.Length - 1
    9. If GetAsyncKeyState(Key(i)) = -32767 Then
    10. MsgBox("Hellooooo")
    11. End If
    12. Next
    13. End Sub


    Problem ist jetzt nur, dass er bei " If GetAsyncKeyState(Key(i)) = -32767 Then " den Fehler bringt : Ungültige Konvertierung von der Zeichenfolge False in Typ Integer.

    Kann mir da einer weiterhelfen ?
    Das liegt daran, das GetAsyncKeyState wohl eine booleansche Variable ausgibt(?), du sie aber mit einem Integer abgleichen willst.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    VB.NET-Quellcode

    1. Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Int32) As Short


    GetAsyncKeyState gibt Short zurück. Zu Bool konvertieren und die Sache läuft.

    Aber ich versteh nicht ganz, wieso alle immer mit diesem "-32767" ankommen (und das Array will mir auch nicht in'n Kopf). Hab einfach mal die Range aus der Keys-Enum genommen, sind ja alle Buchstaben drin.

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
    2. For i = Keys.A To Keys.Z 'Gleichbedeutend mit "For i = 65 To 90"
    3. If CBool(GetAsyncKeyState(i)) Then
    4. MessageBox.Show(Chr(i)) 'den Integer-Wert des Buchstabens, wieder in ein Char konvertieren
    5. End If
    6. Next
    7. End Sub


    PS: Dein Key-Array hat nur 25 Einträge, du hast einen Buchstaben vergessen ;)

    Edit: Du hast keinen Buchstaben vergessen, sondern Key(21) überschrieben. :thumbup: