|
■No88699 (面白 さん) に返信
> これだとキーの同時押しを認識するが難しいため
同時押しの数や組み合わせによっては、そもそも正しく認識できないこともあります。
(使用しているキーボードに依存)
> コード中で、いま矢印キーが押されたかなどを調べたいのですが
> どのようにすれば良いですか?
'参照設定:PresentationCore
'参照設定:WindowsBase
Public Class Form1
Private Labels As Dictionary(Of System.Windows.Input.Key, System.Windows.Forms.Label)
Private View As System.Windows.Forms.FlowLayoutPanel
Public Sub New()
'InitializeComponent()
Text = "白:押されていない/黄:トグル/水:押下中/緑:トグル+押下中"
View = New System.Windows.Forms.FlowLayoutPanel()
View.Dock = System.Windows.Forms.DockStyle.Fill
View.AutoScroll = True
Controls.Add(View)
Labels = System.Enum.GetValues(GetType(System.Windows.Input.Key)) _
.OfType(Of System.Windows.Input.Key)() _
.Where(Function(k) k <> System.Windows.Input.Key.None) _
.Distinct().OrderBy(Function(k) k) _
.ToDictionary(
Function(k) k,
Function(k) New System.Windows.Forms.Label() With
{.Text = k.ToString("G"), .BorderStyle = BorderStyle.Fixed3D}
)
View.Controls.AddRange(Labels.Values.ToArray())
AddHandler System.Windows.Forms.Application.Idle, AddressOf Application_Idle
Size = New Size(800, 700)
End Sub
Private Sub Application_Idle(sender As Object, e As EventArgs)
For Each entry In Labels
Dim state As System.Windows.Input.KeyStates = System.Windows.Input.Keyboard.GetKeyStates(entry.Key)
Select Case state
Case System.Windows.Input.KeyStates.None
entry.Value.BackColor = Color.White
Case System.Windows.Input.KeyStates.Toggled
entry.Value.BackColor = Color.Yellow
Case System.Windows.Input.KeyStates.Down
entry.Value.BackColor = Color.Cyan
Case System.Windows.Input.KeyStates.Toggled Or System.Windows.Input.KeyStates.Down
entry.Value.BackColor = Color.LimeGreen
Case Else
entry.Value.ResetBackColor()
End Select
Next
End Sub
End Class
|