Properties KeyPreview MDIForm kok enggak ada ya ?

Posted by Kamarudin • 1 minute read • Comments

Secara umum ada 2 jenis form yang kita kenal yaitu :

  1. SDI Form
  2. MDI Form

Trus apa perbedaan antara SDI form dan MDI form ? Ya monggo silahkan cari aja sendiri :grin:

Gimana udah dapat perbedaannya ? Ok salah satu properties penting yang dimiliki SDI Form adalah KeyPreview, jika nilainya di set True maka form akan terlebih dulu merespon event keyboard dibandingkan objek lainnya.

Misal kita ingin menambahkan beberapa fungsi shortcut berikut :

Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyEscape Then cmdSelesai_Click 'tombol ESC
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyT And (Shift And vbCtrlMask) Then 'tombol CTRL + T
        If cmdTambah.Enabled = True Then cmdTambah_Click

    ElseIf KeyCode = vbKeyB And (Shift And vbCtrlMask) Then 'tombol CTRL + B
        If cmdPerbaiki.Enabled = True Then cmdPerbaiki_Click

    ElseIf KeyCode = vbKeyH And (Shift And vbCtrlMask) Then 'tombol CTRL + H
        If cmdHapus.Enabled = True Then cmdHapus_Click

    ElseIf KeyCode = vbKeyE And (Shift And vbCtrlMask) Then 'tombol CTRL + E
        cmdSelesai_Click
    End If
End Sub

Kode diatas tidak akan jalan jika properties KeyPreview masih dalam kondisi False (ingat nilai default properties KeyPreview = False).

Nah sesuai dengan judul artikel kali ini yang menjadi pertanyaan adalah MDI Form tidak mempunyai properties KeyPreview, trus bagaimana solusinya jika kita ingin menambahkan tombol shortcut ?

Ada banyak cara, salah satu solusi yang mudah dan murah tentunya :grin: adalah sebagai berikut :

  1. Tambahkan objek Timer kemudian set nilai Intervalnya misal 100
  2. Ketikkan kode berikut misal kita akan membuat shortcut pencarian (CTRL + F)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Timer1_Timer()
    If GetAsyncKeyState(vbKeyF) And &H8000 Then
       If GetAsyncKeyState(vbKeyControl) And &H8000 Then
           'TODO : tampilkan dialog pencarian di sini
       End If
   End If
End Sub

Pertanyaan berikutnya, kenapa harus ada nilai &H8000 ?

Selamat mencoba :blush:

Comments