【问题标题】:Show form on key press in Visual Basic在 Visual Basic 中按键时显示表单
【发布时间】:2013-09-15 12:11:39
【问题描述】:

对于我使用 Visual Basic 2010 Express 制作的程序,我想默认隐藏(最小化)我的表单。我发现了如何做到这一点,所以这不是问题。

但是当我按下例如“F12”键时,我希望再次显示表单。这里的一个困难是没有关注表格。有谁知道如何在不关注应用程序的情况下再次显示表单?

【问题讨论】:

标签: vb.net winforms key-events


【解决方案1】:

检查这些链接(不同的方法 - 选择你的风格):

编辑:关于最后一个,这里是一个简化的例子,很容易重现。在一个全新的 WinForms 应用程序中,在表单上放置一个计时器,在设计器中设置其 Enabled = True,然后将以下内容粘贴到您的表单代码中:

Public Class Form1
  Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Int32) _
                                                                        As Short

  Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If GetAsyncKeyState(Keys.F12) Then Me.WindowState = FormWindowState.Normal
  End Sub
End Class

启动您的应用,最小化表单并按 F12。这将显示您的表格。您可以专注于 VS 以外的其他内容,以确认它按预期工作。我尝试使用 VS 2013 Premium RC 和 Google Chrome(F12 调出表单并打开开发工具)。

考虑到代码量,与其他答案相比,这将是我最喜欢的方法。对于经验丰富的代码专家可能会发现的任何缺点 - 请随时发表评论。

注意:如果你使用链接中的函数签名,你会得到一个pinvoke stack imbalance

【讨论】:

  • 感谢您的回复,但我想前两个不会工作,因为 C#。 (Visual Basic 正在抛出错误)。我确实尝试了最后一个,但它不起作用,我没有收到任何错误,只是没有任何反应。
  • @user1938314:你可以convert C# code to VB.NET。关于最后一个 - 我尝试在一个空项目中重新创建,它在修复 GetAsyncKeyState 函数签名后工作。请参阅我的更新答案。
【解决方案2】:

看看这个全局键盘钩子库。我在一个应用程序中使用它,该应用程序位于托盘中,直到按下一组键。

只需在表单的构造函数中创建 GlobalKeyboardHook 类的私有实例。

private GlobalKeyboardHook gkh = new GlobalKeyboardHook();

然后添加“挂钩”键并连接事件处理程序

gkh.HookedKeys.Add(Keys.LControlKey);
gkh.HookedKeys.Add(Keys.RControlKey);
gkh.HookedKeys.Add(Keys.Down);

gkh.KeyDown += new System.Windows.Forms.KeyEventHandler(gkh_KeyDown);
gkh.KeyUp += new System.Windows.Forms.KeyEventHandler(gkh_KeyUp);

在事件处理程序中检查是否按下了正确的键,然后再次显示您的表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2012-04-23
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多