Tastenerkennung

Dein Code ergibt keinen Sinn. Was verstehst du unter "zwei ereignisse verschachteln"?
Des weiteren kann man keine Sub in einer anderen Sub erstellen.

Kann es sein, dass du einfach nur herausfinden willst, welche Taste gedrückt worden ist?
Dann kannst du das so machen:
Visual Basic:
Private Sub Form_KeyPress(KeyAscii As Integer)
    List1.AddItem VBA.Chr(KeyAscii)
End Sub

Ich denke, du solltest auch mal ein paar VB-Tutorials durchmachen um das Programmier-Prinzip zu verstehen.
 
Dann nimm halt statt dem KeyPress-Ereignis der Form wie in meinem Beispiel das KeyPress-Ereignis der Listbox. Das KeyPress-Ereignis eines Controls kann erst ausgelöst werden, wenn das Control den Fokus hat. Dies geschieht entweder durch Anklicken oder auch durch die Tabulatortaste. Insofern ist es nicht nötig, Ereignisse zu "verschachteln", was übrigens auch gar nicht geht.
 
So noch en Frage, ich hab das soweit schon alles fertig aber fehlen mir noch die "Spezial" Tasten wie Leertaste etc. Ich wolte die nun mit einer If abfrage abfragen Code:

Private Sub List1_KeyPress(KeyAscii As Integer)
List1.Clear
List1.AddItem VBA.Chr(KeyAscii)
If KeyCode = KeyCodeConstants.vbKeySpace Then
List1 = "Leer"
End If
End Sub

Es wird auch kein Fehler angezeigt sondern, das "Leer" wird nicht in die Box geschrieben wie muss ich das machen?
 
Du hast das AddItem vergessen. Normalerweise sollte an der stelle List1="Leer" von der Entwicklungsumgebung ein Fehler ausgegeben werden.
Überprüfe mal, ob bei dir in den Code-Fenstern ganz oben an aller erster Stelle folgendes steht:
Visual Basic:
Option Explicit
Sollte das nicht der Fall sein, so solltest du es auf alle Fälle hinschreiben. Fehlt "Option Explicit", dann erstellt VB automatisch Variablen vom Typ Variant, falls du diese nicht irgendwo mit Dim... definiert hast. Das hat zur Folge, dass man durch den Code nicht mehr durchblickt. Außerdem braucht man nicht allzu häufig Variant-Variablen.
Das heißt, VB wird bei dir eine Variable namens "List1" erstellt haben und diese Variable mit dem Text "Leer" gefüllt haben.
Schau dir das hier mal an.
 
Zuletzt bearbeitet:
Code:
Private Sub List1_KeyPress(KeyAscii As Integer)
List1.Clear
List1.AddItem Chr(KeyAscii)
If KeyAscii = vbKeySpace Then
List1.AddItem "Leer"
End If
End Sub

oder

Code:
Private Sub List1_KeyDown(KeyCode As Integer, Shift As Integer)
List1.Clear
List1.AddItem Chr(KeyCode)
If KeyCode = vbKeySpace Then
List1.AddItem "Leer"
End If
End Sub
 
Beide Varianten funktionieren. KeyPress wird nur bei Buchstaben- und Zahlentasten (praktisch alle Tasten die man zum schreiben eines Textes braucht) ausgelöst, während KeyDown bei wirklich allen Tasten ausgelöst wird (also auch bei Pfeiltasten, Enter, Escape, usw.)
 
soweit funtzt das nun aber ich bekomme space net hin da kommt immer son " | ".
Ach udn wisst ihr zufällig wo ich die namen der Tasten herbekome sonst google ich.
THX
Freddy
 
Es gibt eine API-Funktion, die heißt "GetKeyNameText". Diese liefert dir den Namen einer Taste.
Kleines Beispiel:
Visual Basic:
Option Explicit

Private Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim ScanCodeLng As Long
    Dim ScanCodeByte(3) As Byte
    Dim lParamLng As Long
    Dim lParamByte(3) As Byte
    Dim TmpBuffer As String * 256
    
    'Scancode ermitteln (tastaturspezifische Tasten-ID)
    ScanCodeLng = MapVirtualKey(KeyCode, 0)
    CopyMemory ScanCodeByte(0), ScanCodeLng, 4

    'lParam zusammenbauen
    lParamByte(0) = 1
    lParamByte(2) = ScanCodeByte(0)
    CopyMemory lParamLng, lParamByte(0), 4

    'Text der Taste ermitteln
    GetKeyNameText lParamLng, TmpBuffer, Len(TmpBuffer)

    Me.Caption = TmpBuffer
End Sub
Allerdings sind die Tastennamen nicht besonders hübsch...und manche Tasten haben den gleichen Namen (z.B die Ende-Taste auf dem Num-Block und die "andere" Ende-Taste haben den gleichen Namen. Probier es einfach aus.
Fr3dd1 hat gesagt.:
Ach udn wisst ihr zufällig wo ich die namen der Tasten herbekome sonst google ich.
Normalerweise solltest du erst googlen und dann hier nachfragen.
 

Neue Beiträge

Zurück