Kalo enggak salah ada 2 jenis form yang di kenal VB yaitu :
1. SDI Form
2. MDI Form
Trus Apa perbedaan antara SDI Form dan MDI Form ? Cari sendiri aja ya


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 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 vbAltMask) Then 'tombol CTRL + T
If cmdTambah.Enabled = True Then cmdTambah_Click
ElseIf KeyCode = vbKeyB And (Shift And vbAltMask) Then 'tombol CTRL + B
If cmdPerbaiki.Enabled = True Then cmdPerbaiki_Click
ElseIf KeyCode = vbKeyH And (Shift And vbAltMask) Then 'tombol CTRL + H
If cmdHapus.Enabled = True Then cmdHapus_Click
ElseIf KeyCode = vbKeyE And (Shift And vbAltMask) 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 thread 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

adalah sebagai berikut :
1. Tambahkan objek Timer kemudian set nilai Intervalnya misal 100
2. Ketikkan kode berikut (misal untuk 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
End If
End If
End Sub
Pertanyaan berikutnya, kenapa ada nilai
&H8000 ?
Selamat mencoba
