1

我正在用 C#(Visual Studio,.net framework 4.7.2)构建一个 Windows 窗体应用程序。

我创建了一个表单,并将 HelpButton 属性设置为 True,这样 Context Help 按钮就会出现在窗口的标题栏上,如下所示:

在此处输入图像描述

在正常情况下,用户可以点击这个帮助按钮,激活即时帮助模式。然后他们单击一个控件以显示上下文相关的帮助。(HelpRequested 事件被分派给控件。)

我希望能够使用键盘快捷键激活上下文帮助模式,这样用户就不必单击标题栏上的帮助按钮。换句话说,我需要以编程方式激活 Context Help Mode。这是怎么做到的?

请理解,我不是在询问如何通过按控件上的热键来打开上下文相关帮助。(即在控件具有焦点时按 F1 以显示有关该控件的帮助)。这不是我想做的。我想以编程方式激活上下文帮助模式(光标变为问号),以便用户可以单击所需的控件以获得上下文相关的帮助。)

表单具有“OnHelpButtonClicked()”函数,该函数应该触发帮助按钮单击事件,所以我尝试了以下操作但没有成功:

CancelEventArgs ee = new CancelEventArgs();
this.OnHelpButtonClicked(ee);

如何在不单击窗口标题栏上的帮助按钮的情况下以编程方式打开上下文帮助模式?

感谢您的任何帮助!

4

1 回答 1

0

解决方案,感谢@nilsK 和以下帖子:如何在 WinForms 中做上下文帮助(“这是什么?”按钮)?需要向表单发送 Windows 消息以触发上下文帮助模式:

在窗口的主类中:

private const int SC_CONTEXTHELP = 0xf180;
private const int WM_SYSCOMMAND = 0x112;
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

在按键处理程序或其他事件中触发上下文帮助模式:

SendMessage(this.Handle, WM_SYSCOMMAND, (IntPtr)SC_CONTEXTHELP, IntPtr.Zero);

作品!

于 2020-11-11T16:54:16.607 回答