使用单词而不是单个键/修饰符拦截键组合

时间:2014-06-09 14:36:11

标签: vb.net winforms visual-studio-2012

我正在开发一款软件,我们需要一个校准表格,我们希望安装团队可以使用这些校准表来校准相机。

如果客户需要在将来进行校准,也可以使用此屏幕。

然而,由于它暴露了一些相当低级别和技术配置的事实,我们不希望客户访问此表单,如果它可以避免,并且将破坏我们将必须修复的东西。

因此,我被要求在键的组合上显示此表格,这些键包括在键入单词时按住Ctrl键。 (很像旧的PC作弊)

我的问题是我知道如何使用修饰符(例如ctrl + A)拦截简单按键,但不知道带修饰符的键入词。

如果有人能够告诉我如何最好地实现这样的功能,我将非常感激。

我在Windows窗体环境中使用Visual Studio 2012和VB.net

2 个答案:

答案 0 :(得分:3)

这是一个简化的示例(在一个全新的winforms项目中工作,带有一个名为Button1的按钮和名为Label1的标签,手动放置在表单上) - 当控制键是时,检查有效的秘密序列释放。

Public Class Form1

  Dim word As String

  Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.Control AndAlso e.KeyCode <> Keys.ControlKey Then word &= getChar(e)
  End Sub

  Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
    If e.KeyData = Keys.ControlKey Then
      '<---- this is where you need to check against a valid secret sequence
      Label1.Text = word
      word = String.Empty
    End If
  End Sub

  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    MessageBox.Show(word)
  End Sub

  Private Function getChar(e As KeyEventArgs) As Char
    Dim keyValue As Integer = e.KeyValue
    If Not e.Shift AndAlso keyValue >= CInt(Keys.A) AndAlso
                           keyValue <= CInt(Keys.Z) Then
      Return ChrW(keyValue + 32)
    End If
    Return ChrW(keyValue)
  End Function

End Class

从C#转换getChar(赠送给this answer)。

答案 1 :(得分:1)

您可以声明处理按键的子外字符串属性。在那个子程序中,每次你捕获ctrl +的东西时,你都要把它添加到字符串中并检查它是否包含你想要的单词。