Form_KeyDown等で押されたキーを列挙し、文字列に変換するサンプルを記載します。
ショートカットキーを設定したい場合など、この方法が使えます。


続きを読む

使用例

 ファイル 39-1.png
 例えばこんな感じに使用します。
 ショートカットキーの設定でよく見るアレです。

 

実行環境

Microsoft Visual Studio 2008 Professional(VB.NET)
.NET Framework 2.0
※2003/2005でも、それ以降でも同じことができます。

 

サンプルコード

以下に押されているキーを"+"で連結した文字列に変換する関数を示します。

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
    ''' ====================================================================
    ''' = ◆ 関数機能
    '''  ----
    ''' <summary>
    '''      <para>押されているキーを示す文字列を返します(複数押されている場合"+"で連結)</para>
    ''' </summary>
    '''  ----
    ''' = ◆ 引数
    '''  ----
    ''' <param name="avKeyData">
    '''      <para>キーデータ</para>
    ''' </param>
    '''  ----
    ''' = ◆ 戻り値
    '''  ----
    ''' <returns>
    '''      <para>"+"で連結した押されているキーを示す文字列</para>
    ''' </returns>
    '''  ----
    ''' = ◆ 備考
    '''  ----
    ''' <remarks>
    '''      <para>[SHIFT], [ALT], [A] が押されている場合、"Shift+Alt+A"が返ります</para>
    ''' </remarks>
    ''' ========================================================================
    Public Function GetKeyString(ByVal avKeyData As System.Windows.Forms.Keys) As String
        Dim myKeysString As String = vbNullString
‌ 
        ' ========================================================
        '   押されている修飾子キー[ALT, CTRL, SHIFT]を取得して文字列に変換
        ' ========================================================
        If Keys.None <> (avKeyData And Keys.Modifiers) Then
            Dim myString As String = (avKeyData And Keys.Modifiers).ToString()
            ' ====== "ALT+CTRL+SHIFT" のように"+"で連結する
            myString = myString.Replace(",", "+")
            myString = myString.Replace(" ", "")
            myKeysString = myString
        End If
‌ 
        ' ========================================================
        '   キーデータをキーコードに変換(修飾子部分をマスク)
        ' ========================================================
        Dim myMaskedKeys As System.Windows.Forms.Keys = (avKeyData And Keys.KeyCode)
‌ 
        ' ========================================================
        '   ALT, CTRL, SHIFTなどの修飾子のキーコードを取り除く
        ' ========================================================
        Select Case myMaskedKeys
            Case System.Windows.Forms.Keys.Menu
            Case System.Windows.Forms.Keys.Shift
            Case System.Windows.Forms.Keys.ShiftKey
            Case System.Windows.Forms.Keys.ControlKey
            Case System.Windows.Forms.Keys.Control
            Case System.Windows.Forms.Keys.None
            Case Else
                ' ========================================================
                '   キーコードを文字列に変換
                ' ========================================================
                If Not String.IsNullOrEmpty(myKeysString) Then
                    myKeysString += "+"
                End If
                myKeysString += myMaskedKeys.ToString
        End Select
‌ 
        Return myKeysString
    End Function
このコードは CodePublisher で生成しています

 

テキストボックスでの使用例

1.
2.
3.
4.
5.
6.
7.
8.
    Private Sub TextBox1_KeyDown(ByVal sender As Object,
                 ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
‌ 
        ' ===== 押されたキーを表示する
        TextBox1.Text = GetKeyString(e.KeyData)
‌ 
        ' ===== ここで、TextBox1.ReadOnly = True にしておくこと。
    End Sub
このコードは CodePublisher で生成しています

コメント

  • コメントはまだありません。

コメントを投稿する

コメントを投稿する場合は以下に注意してください。

・記事に関係する内容であること
・特別な理由がない限り「全体公開」であること

これさえ守っていただければどんな内容でも投稿可能です。
皆様の質問やコメントは他の方の問題解決に繋がりますのでご協力ください。

コメント投稿フォーム
名前
メール
URL
コメント
閲覧制限

コメントを投稿するには、以下の問題に答えてください。
問題:「このサイト名をカタカナ六文字にして入力してください」