• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 272
  • Last Modified:

BUTTON AND KEYCODE

Hi All,

I have a windows form.
I let the user to use mouse click or keystroke from keyboard to do something.
Every button has associate keystroke.

For example Button Ok equal to Key F4.

I have below code to check keystroke :

 Private Sub frmMain_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown

        If e.KeyCode = Keys.Escape Then
            Dim intAnswer As Integer = MsgBox("Yakin Mau Keluar Dari Menu ...!", MsgBoxStyle.YesNo, Me.Text)
            If intAnswer = vbYes Then
                Me.Close()
                Exit Sub
            End If
        End If

        Me.Call_Form(sender, e)

    End Sub

Private Sub Call_Form(sender As Object, e As KeyEventArgs)

        Select Case e.KeyCode
            Case Keys.F3

                Dim frmPanggilPesanan As New frmPanggilPesanan

                With frmPanggilPesanan
                    .ShowDialog()
                End With

                frmPanggilPesanan = Nothing

            Case Keys.F5

                Dim frmTundaPesanan As New frmTundaPesanan

                With frmTundaPesanan
                    .ShowDialog()
                End With

                frmTundaPesanan = Nothing

            Case Keys.F6

                Dim frmDaftarPesanAntar As New frmDaftarPesanAntar

                With frmDaftarPesanAntar
                    .ShowDialog()
                End With

                frmDaftarPesanAntar = Nothing

            Case Keys.F9

                Dim frmPembayaran As New frmPembayaran

                With frmPembayaran
                    .ShowDialog()
                End With

                frmPembayaran = Nothing

            Case Keys.F11

                Dim frmMenuKasir As New frmMenuKasir

                With frmMenuKasir
                    .ShowDialog()
                End With

                frmMenuKasir = Nothing

            Case Keys.F12

                Dim intYesNo As Integer = MsgBox("Abaikan Perubahan ...!", MsgBoxStyle.YesNo, Me.Text)

                If intYesNo = vbYes Then
                    Clear_Grid()
                End If


        End Select

    End Sub

I want to use sub Call_Form from button click. I don't want to make duplicate sub for check button.

How could I do it ?

Thank you.
0
emi_sastra
Asked:
emi_sastra
  • 10
  • 9
1 Solution
 
Meir RivkinFull stack Software EngineerCommented:
>>I want to use sub Call_Form from button click
to do what?
should be equivalent to specific keystroke?
0
 
emi_sastraAuthor Commented:
-should be equivalent to specific keystroke?
Yes.

Thank you.
0
 
emi_sastraAuthor Commented:
I want to reuse Sub Call_Form(sender As Object, e As KeyEventArgs) for button click.

Thank you.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Meir RivkinFull stack Software EngineerCommented:
which keystroke?
F4 key?
0
 
emi_sastraAuthor Commented:
-which keystroke?
Every button has associate keystroke.

Thank you.
0
 
Meir RivkinFull stack Software EngineerCommented:
change Keys.F2 to the button associated key, and change button1 to the button name.
in your button click event handler, have this code:
Dim keyEventArgs = New KeyEventArgs(Keys.F2)
Call_Form(button1, keyEventArgs)

Open in new window

0
 
emi_sastraAuthor Commented:
Suppose I have 10 button.
How to code it ?

Thank you.
0
 
emi_sastraAuthor Commented:
For example :

btnAdd        F2
btnUpd        F3
btnDel         F4
btnSave       F5
btnCancel   F6

Thank you.
0
 
Meir RivkinFull stack Software EngineerCommented:
add click event handler for each button and inside pass the relevant key code to Call_Form.
for example:
sub btnAdd_Click(...)
Dim keyEventArgs = New KeyEventArgs(Keys.F2)
Call_Form(btnAdd, keyEventArgs)
end sub

Open in new window

0
 
Meir RivkinFull stack Software EngineerCommented:
you can create a single click event handler for all buttons and pass relevant key code to Call_Form, instead of creating click event handler for each one.
to do so u need first to map each button to its associated key using dictionary or hash, and then create a single handler to handle all buttons click events:
    Private Sub genericButtonHandler_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click, btnSave.Click, btnCancel.Click,btnDel.Click,btnUpd.Click
        Dim dictionary As New Dictionary(Of Button, Short)
        dictionary.Add(btnAdd, Keys.F2)
        dictionary.Add(btnUpd, Keys.F3)
        dictionary.Add(btnDel, Keys.F4)
        dictionary.Add(btnSave, Keys.F5)
        dictionary.Add(btnCancel, Keys.F6)
        Dim btn As Button = DirectCast(sender, Button)
        Dim keyEventArgs = New KeyEventArgs(dictionary(btn))
Call_Form(btn, keyEventArgs)
    End Sub

Open in new window

0
 
emi_sastraAuthor Commented:
Really great.

Thank you very much for your help.
0
 
emi_sastraAuthor Commented:
One problem.

How if the key stroke is Ctrl+Del or other combination key ?

Thank you.
0
 
Meir RivkinFull stack Software EngineerCommented:
u use the bitwise OR (|) operator to apply modifier like Ctrl/Alt keys.
for example:
Dim keyEventArgs = New KeyEventArgs(Keys.Delete Or Keys.Control)

Open in new window

0
 
emi_sastraAuthor Commented:
Below code error :

 dictionary.Add(btnCancel, (Keys.Delete Or Keys.Control))

Thank you.
0
 
Meir RivkinFull stack Software EngineerCommented:
what error?
0
 
emi_sastraAuthor Commented:
Error      1      Constant expression not representable in type 'Short'.      

Thank you.
0
 
Meir RivkinFull stack Software EngineerCommented:
change Short to Integer
0
 
emi_sastraAuthor Commented:
No compile error.

Thank you very much for your help.
0
 
Meir RivkinFull stack Software EngineerCommented:
u welcome.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 10
  • 9
Tackle projects and never again get stuck behind a technical roadblock.
Join Now