【问题标题】:How to make a KeyDown work twice如何使 KeyDown 工作两次
【发布时间】:2013-12-16 10:33:07
【问题描述】:

我正在用 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 事件。

希望这是有道理的,但感谢大家的帮助!

【问题讨论】:

  • 请包含您的事件和处理程序的一些代码
  • 试试加断点,第二次打了吗?
  • 我认为您在按下 Escape 时失去了对表单的关注。尝试重新定位焦点(通过单击表单)并重新按下 Escape。如果它有效,那么请尝试在事件结束时以编程方式将焦点强制放在控件上

标签: vb.net winforms


【解决方案1】:

您正在使用 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

【讨论】:

  • 我看了你在说什么,但我不完全明白你想说什么。我想要它,所以当我按下退出键时,它会隐藏页面上的所有内容并显示一些暂停类型菜单的内容。但是当我按下我制作的继续按钮时,它会隐藏与暂停菜单有关的所有内容,并再次显示所有内容。这有效,但只有一次。每次按退出键时,我都需要它来显示菜单。谢谢
【解决方案2】:

使用类级别的布尔值作为切换应该可以工作:

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

【讨论】:

  • 我尝试使用您的代码,当我按两次退出键时效果很好,现在唯一的问题是当我单击我制作的继续按钮时,我无法再按退出键打开又是菜单?任何想法的
  • 编辑您的原始帖子并显示继续按钮单击代码及其调用的任何例程。
【解决方案3】:

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

If _processingKeyDown Then Return

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多