2016-06-24 5 views
-2

vb.netでプログラムを開発しようとしましたが、キャップロックキーを押したときにチェックボックスをオンまたはオフにすることができました。私は以下のコードを使って同じことをしましたが、うまくいきませんでした。vb.netでキャップロックキーが押されたときにチェックボックスをチェックする方法

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress 
    If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.CapsLock) Then 
     checkbutton_caps.Checked = True 
    End If 

このコードで何が問題になっていますか?

+0

変更してみてください '' Control.IsKeyLocked(Keys.CapsLock)にMicrosoft.VisualBasic.ChrW(Keys.CapsLock)は '' – MusicLovingIndianGirl

+1

は 'もしMy.Computer.Keyboard.CapsLock = TrueのThen'を試してみてください。 –

+0

あなたは間違ったイベントを処理しています。 「KeyPress」は、入力のために生成される文字の結果となるキーの組み合わせ(組み合わせがただ1つのキーであってもよい)に応答して発生する。 CapsLockキーは文字を生成しません。あなたは 'KeyDown'または' KeyUp'を処理しなければならないでしょう。これは単一のキーボードキーに応答して発生します。つまり、特定のキーはデフォルトでどちらのイベントも生成しません。 CapsLockが行うかどうかはわかりません。 – jmcilhinney

答えて

0
Imports System 
Imports System.Windows.Forms 
Imports Microsoft.VisualBasic 

Public Function GetCapsLockState() As Boolean 
    If Control.IsKeyLocked(Keys.CapsLock) Then 
     Return True 
    Else 
     Return False 
    End If 
End Function 

If GetCapsLockState Then 
    checkbutton_caps.Checked = True 
End If 
0
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
    If e.KeyCode = Keys.Capital Then 
     CheckBox1.Checked = Not CheckBox1.Checked 
    End If 
End Sub 

CapitalCapsLockの両方が動作します。

コードまたはプロパティのいずれかにMe.KeyPreview = Trueを設定することも忘れないでください。

これは、これらのコードが動作する程度keydown vs keypress

2

両方に有用な研究です。

KeyPreviewプロパティを使用しないKeyPreview = True

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
    If e.KeyCode = Keys.CapsLock Then 
     checkbutton_caps.Checked = True    
    End If 
End Sub 

➤設定➤(単純に、あなたのプログラムにこのコードを追加します)。

Protected Overrides Function ProcessCmdKey(ByRef Msg As Message, _ 
              ByVal Key As Keys) _ 
              As Boolean 
    If Msg.WParam = Keys.CapsLock Then 
     checkbutton_caps.Checked = True   
     Return True 
    End If 
     Return Me.ProcessCmdKey(Msg, Key) 
End Function 

ヒント:キーが再び押されたときにcheckboxをオフにこのコードを使用します。

checkbutton_caps.Checked = Not checkbutton_caps.Checked 

'Instead of... 

checkbutton_caps.Checked = True 
+1

'checkbutton_caps.Checked = Not checkbutton_caps.Checked'とすると、再度押すとチェックボックスが非アクティブになると思います。 –

+0

Thanks @ SuperPeanutがコメントとして追加しました:) –

関連する問題