Hallo,
ich steh grad bissl aufm Schlauch und komm irgendwie nich weiter. Vielleicht habt Ihr ja ne Idee. Das Problem:
Ich Implementiere in meiner MDI-Anwendung in einem Fenster IMessageFilter um Tastatureingaben abzufangen:
Wenn er anhand des PreFilterMessage das Ereignis OnKeyDown aufruft und in mein implementiertes Keydown-Ereignis des Forms springt, so kennt der alle private-Variablen nicht mehr. Das heißt z.B. wenn ich einen Videoplayer hab und der einen Framestepbutton besitzt, dann funktioniert der Framestep super, wenn ich auf den Button klicke. Nehme ich allerdings die Richtungstaste und die PreFilterMessage-Funktion wird durchlaufen, so kennt der viele Objekte in der FrameStep-Methode nichtmehr. Muss ich dann alle Objekte, die dort verwendet werden als shared definieren?
--> alle Anweisungen in performStepFwd() funktionieren
--> wird u.a. von PreFilterMessage aufgerufen
--> Anwendung stürzt ab, weil Anweisungen in performStepFwd() nicht ausgeführt werden können (Objekte und Variablen sind nicht gesetzt)
Wie kann ich das Problem umgehen?
Gruß ... Drea
ich steh grad bissl aufm Schlauch und komm irgendwie nich weiter. Vielleicht habt Ihr ja ne Idee. Das Problem:
Ich Implementiere in meiner MDI-Anwendung in einem Fenster IMessageFilter um Tastatureingaben abzufangen:
Code:
Private Function PreFilterMessage(ByRef m As _
System.Windows.Forms.Message) As Boolean Implements _
System.Windows.Forms.IMessageFilter.PreFilterMessage
Debug.WriteLine(m.Msg.ToString)
' Message = WM_KEYDOWN
If m.Msg = &H100 Then
Select Case m.WParam.ToInt32
Case &H26 'Up
OnKeyDown(New KeyEventArgs(Keys.Up))
Return True
Case &H28 'Down
OnKeyDown(New KeyEventArgs(Keys.Down))
Return True
Case &H25 'Left
OnKeyDown(New KeyEventArgs(Keys.Left))
Return True
Case &H27 'right
OnKeyDown(New KeyEventArgs(Keys.Right))
Return True
End Select
End If
' Nachrichtenbearbeitung fortsetzen
Return False
End Function
Wenn er anhand des PreFilterMessage das Ereignis OnKeyDown aufruft und in mein implementiertes Keydown-Ereignis des Forms springt, so kennt der alle private-Variablen nicht mehr. Das heißt z.B. wenn ich einen Videoplayer hab und der einen Framestepbutton besitzt, dann funktioniert der Framestep super, wenn ich auf den Button klicke. Nehme ich allerdings die Richtungstaste und die PreFilterMessage-Funktion wird durchlaufen, so kennt der viele Objekte in der FrameStep-Methode nichtmehr. Muss ich dann alle Objekte, die dort verwendet werden als shared definieren?
Code:
'Button 1 Frame vorwärts
Private Sub btnStepFwd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStepFwd.Click
performStepFwd()
End Sub
Code:
Private Sub Vorschau_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Escape Then
Me.Close()
ElseIf e.KeyCode = Keys.Left Then
Me.performStepRew()
ElseIf e.KeyCode = Keys.Right Then
Me.performStepFwd()
End If
End Sub
--> Anwendung stürzt ab, weil Anweisungen in performStepFwd() nicht ausgeführt werden können (Objekte und Variablen sind nicht gesetzt)
Wie kann ich das Problem umgehen?
Gruß ... Drea