Hello everyone,
I am having a slight problem with a program i am working on for a class, I am using Visual Studio 2005. The program only allows the up arrow key as input. In the code it is set up that one tap of the key will highlight (change the back color) of the next button, and that a double tap of the key will be like a mouse click and select that button. Most of the buttons will lead to new forms being displayed. At the moment I only have two forms (frmMain, and frmCreate). The button presses work fine on frmMain and i can switch to frmCreate and hide frmMain fine, the problem is that on frmCreate nothing is happening. Everytime i press the up key it does not highlight the next button, but if i tap enough times to get to the Quit button and double tap it closes just fine, so i think it is working but not changing the color.
ok here is the code so far for frmMain:
and the code for frmCreate:
Thanks in advance for your help
I am having a slight problem with a program i am working on for a class, I am using Visual Studio 2005. The program only allows the up arrow key as input. In the code it is set up that one tap of the key will highlight (change the back color) of the next button, and that a double tap of the key will be like a mouse click and select that button. Most of the buttons will lead to new forms being displayed. At the moment I only have two forms (frmMain, and frmCreate). The button presses work fine on frmMain and i can switch to frmCreate and hide frmMain fine, the problem is that on frmCreate nothing is happening. Everytime i press the up key it does not highlight the next button, but if i tap enough times to get to the Quit button and double tap it closes just fine, so i think it is working but not changing the color.
ok here is the code so far for frmMain:
Code:
Public Class frmMain
Implements IMessageFilter
Const WM_KEYDOWN As Integer = &H100
Dim clickCount As Integer = 0
Private Sub tmrMain_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrMain.Tick
Me.tmrMain.Stop()
If (clickCount >= 1) Then
If (clickCount = 1) Then 'SINGLE "click"
If btnCreate.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreate.BackColor = Color.FromKnownColor(KnownColor.Control)
btnOpen.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnOpen.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnOpen.BackColor = Color.FromKnownColor(KnownColor.Control)
btnSearch.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnSearch.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnSearch.BackColor = Color.FromKnownColor(KnownColor.Control)
btnHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnHelp.BackColor = Color.FromKnownColor(KnownColor.Control)
btnQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnQuit.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreate.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
End If
ElseIf (clickCount > 1) Then ' DOUBLE "click"
If btnCreate.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
Me.Hide()
frmCreate.Show()
ElseIf btnOpen.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnSearch.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
Me.Close()
Application.ExitThread()
End If
End If
End If
clickCount = 0
Me.tmrMain.Start()
End Sub
Public Function HandleKeys(ByVal keyCode As Keys) As Boolean
Dim ret As Boolean = True
Me.tmrMain.Stop()
Select Case keyCode
Case Keys.Up
clickCount += 1
End Select
Me.tmrMain.Start()
Return ret
End Function
Public Function PreFilterMessage(ByRef m As Message) As Boolean _
Implements IMessageFilter.PreFilterMessage
Dim k As System.Windows.Forms.Keys = m.WParam
If (m.Msg = WM_KEYDOWN) Then
Return HandleKeys(k)
Else
Return False
End If
End Function
Public Sub New()
InitializeComponent()
Application.AddMessageFilter(Me)
End Sub
End Class
Code:
Public Class frmCreate
Implements IMessageFilter
Const WM_KEYDOWN As Integer = &H100
Dim clickCount As Integer = 0
Private Sub tmrCreate_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrCreate.Tick
Me.tmrCreate.Stop()
If (clickCount >= 1) Then
If (clickCount = 1) Then 'SINGLE "click"
If btnCreateNote.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateNote.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateCat.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnCreateCat.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateCat.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateAtt.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnCreateAtt.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateAtt.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnCreateHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateHelp.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateBack.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnCreateBack.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateBack.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
ElseIf btnCreateQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
btnCreateQuit.BackColor = Color.FromKnownColor(KnownColor.Control)
btnCreateNote.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption)
End If
ElseIf (clickCount > 1) Then ' DOUBLE "click"
If btnCreateNote.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnCreateCat.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnCreateAtt.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnCreateHelp.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
ElseIf btnCreateBack.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
frmMain.Show()
Me.Close()
ElseIf btnCreateQuit.BackColor = Color.FromKnownColor(KnownColor.GradientActiveCaption) Then
Me.Close()
Application.ExitThread()
End If
End If
End If
clickCount = 0
Me.tmrCreate.Start()
End Sub
Public Function HandleKeys(ByVal keyCode As Keys) As Boolean
Dim ret As Boolean = True
Me.tmrCreate.Stop()
Select Case keyCode
Case Keys.Up
clickCount += 1
End Select
Me.tmrCreate.Start()
Return ret
End Function
Public Function PreFilterMessage(ByRef m As Message) As Boolean _
Implements IMessageFilter.PreFilterMessage
Dim k As System.Windows.Forms.Keys = m.WParam
If (m.Msg = WM_KEYDOWN) Then
Return HandleKeys(k)
Else
Return False
End If
End Function
Public Sub New()
InitializeComponent()
Application.AddMessageFilter(Me)
End Sub
End Class