keypress wird 2mal durchlaufen...

-cta-

Mitglied
hallo!

ich hab folgendes problem:

wenn ich die taste "i" klicke wird die msgbox immer 2mal aufgerufen...

die komplette sub wird 2mal durchlaufen....


warum



Code:
Private Sub form_keypress(keyascii As Integer)

If keyascii = 105 And sstbStart.Tab = 0 Then

msgbox "bla!"

End If


end sub
 
Hast Du es schonmal mit dem OnKeyUp- oder OnKeyDown-Ereignis versucht?
Ansonsten solltest Du evtl. mal die Eigenschaften des Formulars überprüfen, unter Umständen hast Du die Eigenschaft KeyPreview (oder wie die auch immer heissen mag) falsch eingestellt. In dem Fall wird der Tastendruck zuerst an das Formular und dann an das fokussierte Control geschickt.
 
kannst du mir ein beispiel geben bitte?

meine hilfe ist nicht vollständig...habe zu onkeydown -up keine untereinträge...:rolleyes:


und...

die KeyPreview steht auf TRUE....wenn ich sie auf FALSE setze, passiert gar nichts....

:(
 
Zuletzt bearbeitet:
KeyPreview muss auf True sein damit Form_KeyPress reagiert wenn du eine Taste drückst aber ein Control und nicht das Form den Fokus hat.

Ich hab mir das mal angesehen, liegt an dem SSTab.
Ohne klappt es wunderbar, aber mit mischt es sich irgendwo ein, sodas das Event zweimal ausgelöst wird. Das ist aber nur der Fall wenn das SSTab den Fokus hat.

Wie man das ändern weiß ich nicht, aber eine Möglichkeit wäre im Got_Focus-Event des SSTab den Fokus auf ein anderes Control zu setzen.

KeyUp/KeyDown funktionieren ähnlich wie KeyPress (in der Entwicklungsumgebung bei den Ereignissen auswählen).

KeyDown tritt ein sobald die Taste runter gedrückt wird,
KeyUp beim Loslassen der Taste und
KeyPress bei "vollständigem" Drücken, also drücken und wieder loslassen.

Nur liefert Up/Down nicht KeyAscii, sondern einen KeyCode, für i wäre der 73 oder vbKeyI.
 
Zuletzt bearbeitet:
@retlaw:

kannst du mir bitte anhand meines codeschnippsels ein beispiel geben?

oder brauchst du was mehr

irgendwie hauts nicht hin.... das ereignis wir immer 2ml durchlaufen...
 
Vielleicht nicht die eleganteste Lösung, aber was anderes fällt mir grad nicht ein.
Du fügst eine PictureBox in dein Formular ein und verschiebst es ausserhalb des sichtbaren Bereichs (Visible=False geht nicht, da unsichtbare Controls keinen Fokus haben können).
Die TabStop-Eigenschaft der PictureBox habe ich auf False gesetzt.
Wenn das SSTab den Fokus bekommt wird er sofort an die (nicht sichtbare) PictureBox weiter gegeben.
Code:
Private Sub Form_Load()
    Picture1.Top = -1000 'aus dem sichtbaren Bereich schieben
End Sub

Private Sub sstbStart_GotFocus()
    Me.Picture1.SetFocus 'Fokus weiter geben
End Sub
 
Zuletzt bearbeitet:
Zurück