如何在VB.NET中检测按下的键

时间:2018-06-11 09:13:52

标签: vb.net keypress

我知道KeyDown,KeyPress和KeyUp事件,但我不知道如何检测我按下的键。

有没有办法捕捉按键的值?

例如:我按'W'并且某些字符串获得'W'的值

2 个答案:

答案 0 :(得分:2)

这告诉你按下了什么键:

Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 

        MsgBox(e.KeyChar) 

End Sub 

您应该能够根据自己的需要进行修改。

编辑:

如果您需要检测非字符键按下(例如F1等),则无法使用按键事件,因为它不是由非字符键引发的。然后,您将不得不使用KeyUp或KeyDown事件。我更喜欢KeyUp事件,原因很简单,KeyDown事件只要关闭它就会触发,所以请记住这一点。

Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp

    MessageBox.Show(e.KeyValue)

End Sub

这将返回按下的键的int号,但它不区分大小写。

您应该能够通过以下方式检测到这些:

If Control.ModifierKeys = Keys.Shift Or Control.ModifierKeys = Keys.Control Then
        MsgBox("SHIFT or CTRL key pressed with " & e.KeyValue & ".")

    Else

        MessageBox.Show(e.KeyValue)

    End If

示例用法:查看是否按下了例如回车键:

Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp

    IF e.KeyValue = 13 Then

       MessageBox.Show("Enter Key Was Pressed")

    End If

End Sub

有关哪个值代表哪个键的列表,请参阅:

Dec      Char                       Dec Char      Dec Char     Dec Char
--------------                      ---------     ---------     ----------
 0  NUL (null)                      32  SPACE     64  @         96  `
 1  SOH (start of heading)          33  !         65  A         97  a
 2  STX (start of text)             34  "         66  B         98  b
 3  ETX (end of text)               35  #         67  C         99  c
 4  EOT (end of transmission)       36  $         68  D        100  d
 5  ENQ (enquiry)                   37  %         69  E        101  e
 6  ACK (acknowledge)               38  &         70  F        102  f
 7  BEL (bell)                      39  '         71  G        103  g
 8  BS  (backspace)                 40  (         72  H        104  h
 9  TAB (horizontal tab)            41  )         73  I        105  i
10  LF  (NL line feed, new line)    42  *         74  J        106  j
11  VT  (vertical tab)              43  +         75  K        107  k
12  FF  (NP form feed, new page)    44  ,         76  L        108  l
13  CR  (carriage return)           45  -         77  M        109  m
14  SO  (shift out)                 46  .         78  N        110  n
15  SI  (shift in)                  47  /         79  O        111  o
16  DLE (data link escape)          48  0         80  P        112  p
17  DC1 (device control 1)          49  1         81  Q        113  q
18  DC2 (device control 2)          50  2         82  R        114  r
19  DC3 (device control 3)          51  3         83  S        115  s
20  DC4 (device control 4)          52  4         84  T        116  t
21  NAK (negative acknowledge)      53  5         85  U        117  u
22  SYN (synchronous idle)          54  6         86  V        118  v
23  ETB (end of trans. block)       55  7         87  W        119  w
24  CAN (cancel)                    56  8         88  X        120  x
25  EM  (end of medium)             57  9         89  Y        121  y
26  SUB (substitute)                58  :         90  Z        122  z
27  ESC (escape)                    59  ;         91  [        123  {
28  FS  (file separator)            60  <         92  \        124  |
29  GS  (group separator)           61  =         93  ]        125  }
30  RS  (record separator)          62  >         94  ^        126  ~
31  US  (unit separator)            63  ?         95  _        127  DEL

https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

找到了ASCII表

答案 1 :(得分:1)

使用Char.ConvertFromUtf32函数。因此,如果您正在使用文本框并正在查看keydown事件,例如:

Private Sub txtData_Keydown(sender As Object, e As KeyEventArgs) handles txtData.keydown
    if e.keyvalue>64 and e.keyvalue <91 then 'if its a letter a-z A-Z keydown always gives uppercase A to Z
       Dim eChr As String = Char.ConvertFromUtf32(If(e.Shift, e.KeyValue, e.KeyValue + 32)) 
    endif

其中e.shift指示是否按下了Shift键(大写或小写)。 eChr现在将是一个包含您按下的'(L)字母'的字符串。 使用Keydown时,您必须小心仅捕获您感兴趣的键。按下Shift键,箭头键,功能等也会触发此事件。