按下帮助按钮时显示消息框
Show a MessageBox when the Help Button is pressed
我试图在按下表单的拼贴栏中的上下文帮助按钮时显示 MessageBox(或我可以将文本放入其中的东西)。
这是我想要按下的帮助按钮:
任何帮助都会很棒! :)
您需要连接 HelpRequested
或 HelpButtonClicked
事件
此外,您需要通过设置
来显示按钮(在表单上默认关闭)
- HelpButton = true
- 最小化框 = false
- 最大化框 = 假
听起来您是 C# 的新手,所以我将通过示例向您介绍最简单的 运行:
在 InitializeComponent() 函数中您需要添加:
HelpRequested += new System.Windows.Forms.HelpEventHandler(this.form_helpRequested);
一旦按下帮助按钮,这将告诉表单 运行 form_helpRequested。然后你可以实现这个事件处理函数:
private void textBox_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent)
{
// Your code here
// Example of a popup with text:
MessageBox.Show("This is a help popup");
}
这一切都需要在您的 Form1.cs(或等效的)脚本中。
关于此事件处理程序的参考,我建议阅读这篇文章:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.helprequested?view=windowsdesktop-6.0
对已发布内容的一些补充。
Help Button 显示在表格的标题中。
要激活它,请设置 HelpButton = true
、MinimizeBox = false
和 MaximizeBox = false
.
- 当单击“帮助”按钮时,仅针对表单引发 HelpButtonClicked event。
- 之后单击控件时(当鼠标指针呈问号形状时)引发 HelpRequested event。
要显示与控件相关的帮助,您可以订阅提供帮助的每个控件的 HelpRequested
事件,或者您可以只使用表单的所有控件的 HelpRequested
事件。
您需要获取单击鼠标时选择的 child 控件。
我在这里使用 WindowFromPoint() to get the handle of the Control at the position specified by HelpEventArgs.
该函数可以获取嵌套控件的句柄。
A Dictionary<Control, string>
用于存储和检索所有控件的帮助文本,这些控件应提供其功能(或其他任何内容)的描述。
帮助文本当然可以来自本地化的项目资源。
请注意,不会为 ContainerControl(表单本身、Panel、GroupBox 等)生成帮助,并且WindowFromPoint
不会获取已禁用控件的句柄。
using System.Runtime.InteropServices;
public partial class SomeForm : Form
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern IntPtr WindowFromPoint(Point point);
Dictionary<Control, string> help = new Dictionary<Control, string>();
public SomeForm() {
InitializeComponent();
help.Add(someButton, "Help on someButton");
help.Add(someTextBox, "someTextBox gets help");
help.Add(someNestedControl, "someNestedControl needs clarifications");
}
private void SomeForm_HelpButtonClicked(object sender, CancelEventArgs e) {
// The Help Button has been clicked
}
private void SomeForm_HelpRequested(object sender, HelpEventArgs e) => ShowHelp(e);
public void ShowHelp(HelpEventArgs e) {
e.Handled = true;
var ctl = FromHandle(WindowFromPoint(e.MousePos));
if (ctl != null && help.ContainsKey(ctl)) {
MessageBox.Show(help[ctl]);
}
else {
MessageBox.Show("No help for this Control");
}
}
}
我试图在按下表单的拼贴栏中的上下文帮助按钮时显示 MessageBox(或我可以将文本放入其中的东西)。
这是我想要按下的帮助按钮:
任何帮助都会很棒! :)
您需要连接 HelpRequested
或 HelpButtonClicked
事件
此外,您需要通过设置
来显示按钮(在表单上默认关闭)- HelpButton = true
- 最小化框 = false
- 最大化框 = 假
听起来您是 C# 的新手,所以我将通过示例向您介绍最简单的 运行:
在 InitializeComponent() 函数中您需要添加:
HelpRequested += new System.Windows.Forms.HelpEventHandler(this.form_helpRequested);
一旦按下帮助按钮,这将告诉表单 运行 form_helpRequested。然后你可以实现这个事件处理函数:
private void textBox_HelpRequested(object sender, System.Windows.Forms.HelpEventArgs hlpevent)
{
// Your code here
// Example of a popup with text:
MessageBox.Show("This is a help popup");
}
这一切都需要在您的 Form1.cs(或等效的)脚本中。
关于此事件处理程序的参考,我建议阅读这篇文章:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.helprequested?view=windowsdesktop-6.0
对已发布内容的一些补充。
Help Button 显示在表格的标题中。
要激活它,请设置 HelpButton = true
、MinimizeBox = false
和 MaximizeBox = false
.
- 当单击“帮助”按钮时,仅针对表单引发 HelpButtonClicked event。
- 之后单击控件时(当鼠标指针呈问号形状时)引发 HelpRequested event。
要显示与控件相关的帮助,您可以订阅提供帮助的每个控件的 HelpRequested
事件,或者您可以只使用表单的所有控件的 HelpRequested
事件。
您需要获取单击鼠标时选择的 child 控件。
我在这里使用 WindowFromPoint() to get the handle of the Control at the position specified by HelpEventArgs.
该函数可以获取嵌套控件的句柄。
A Dictionary<Control, string>
用于存储和检索所有控件的帮助文本,这些控件应提供其功能(或其他任何内容)的描述。
帮助文本当然可以来自本地化的项目资源。
请注意,不会为 ContainerControl(表单本身、Panel、GroupBox 等)生成帮助,并且WindowFromPoint
不会获取已禁用控件的句柄。
using System.Runtime.InteropServices;
public partial class SomeForm : Form
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern IntPtr WindowFromPoint(Point point);
Dictionary<Control, string> help = new Dictionary<Control, string>();
public SomeForm() {
InitializeComponent();
help.Add(someButton, "Help on someButton");
help.Add(someTextBox, "someTextBox gets help");
help.Add(someNestedControl, "someNestedControl needs clarifications");
}
private void SomeForm_HelpButtonClicked(object sender, CancelEventArgs e) {
// The Help Button has been clicked
}
private void SomeForm_HelpRequested(object sender, HelpEventArgs e) => ShowHelp(e);
public void ShowHelp(HelpEventArgs e) {
e.Handled = true;
var ctl = FromHandle(WindowFromPoint(e.MousePos));
if (ctl != null && help.ContainsKey(ctl)) {
MessageBox.Show(help[ctl]);
}
else {
MessageBox.Show("No help for this Control");
}
}
}