如何使KeyDown工作两次

时间:2013-12-16 10:33:07

标签: vb.net winforms

我正在研究visual basic中的一个小故事类型的东西。没有什么太复杂但我遇到了问题。我正在尝试制作暂停功能。我把它全部工作当我按下逃生时,表格进入菜单类型的东西。唯一的问题是它只能工作一次。第一次印刷工作,但如果我继续,它继续从我离开的地方。但是,如果我再次按它,​​没有任何反应。这是我正在使用的代码:

Private Sub Story_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Escape Then
        Text.Hide()
        Background.Hide
        ContinueButton.Show
        OptionsButton.Show
    End If
End Sub

我有什么办法让这项工作不止一次吗?我在私有子中使用KeyDown事件。

希望这是有道理的,但感谢任何帮助人员!

3 个答案:

答案 0 :(得分:0)

您正在使用Form.KeyPreview = true来捕获表单击键。我认为Text.Hide()Show操作之一可能是问题,例如使TabStop无序或在标签序列中留下间隙。

尝试重置控件或使用SendKeys重置选项卡序列索引(使控件具有焦点),例如,Tab forward和Alt Tab back:

SendKeys.Send("{TAB}");

SendKeys.Send("%{TAB}");

价: http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx

答案 1 :(得分:0)

使用类级别布尔值作为切换应该起作用:

Dim Hide As Boolean = False
Private Sub Story_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.Escape Then
        Hide = Not Hide          
        If Hide Then
            Text.Hide()
            Background.Hide
            ContinueButton.Show
            OptionsButton.Show
        Else
            Text.Show()
            Background.Show
            ContinueButton.Hide
            OptionsButton.Hide
    End If
End Sub

答案 2 :(得分:0)

如果没有其他帮助,您可以随时拥有一个私有的类级变量,如_processingKeyDown,在处理程序启动时设置为True,完成后设置为False。处理程序中的第一行是:

If _processingKeyDown Then Return