工具栏项的上下文帮助






3.44/5 (7投票s)
如何将上下文相关帮助绑定到 .NET 工具栏项目。
引言
.NET Framework 中的 Windows Forms 库对上下文相关帮助提供了很好的支持。您可以为程序中的每个控件分配一个帮助主题。只要控件获得焦点,该主题就会自动显示,只需按下 F1 即可。
当您尝试对 ToolStrip
项目(例如 ToolStripButton
或 ToolStripComboBox
)执行此操作时,会出现问题。这些类不是控件,它们不是从 Control
派生的,而是从 ToolStripItem
类派生的。您需要一些技巧才能使上下文相关帮助与这些对象一起工作。
解决方案
一个简单的例子是那些从 ToolStripControlHost
派生的类,例如 ToolStripComboBox
。它们创建控件来绘制自身。因此,我们可以将此控件绑定到帮助主题,如以下代码片段所示
helpProvider1.SetHelpKeyword(toolStripComboBox1.Control, "Chapter_2.htm");
helpProvider1.SetHelpNavigator(toolStripComboBox1.Control, HelpNavigator.Topic);
如果您想将上下文相关帮助绑定到其他 ToolStripItem
,例如 ToolStripButton
,您需要做更多的工作。首先,您需要一个自定义的 HelpProvider
class CustomHelpProvider: HelpProvider
{
public override string GetHelpKeyword(Control ctl)
{
ToolStrip ts = ctl as ToolStrip;
if (ts != null) {
foreach (ToolStripItem item in ts.Items) {
if (item.Selected) {
string keyword = item.Tag as string;
if (keyword != null)
return keyword;
}
}
}
return base.GetHelpKeyword(ctl);
}
}
CustomHelpProvider
检查 ToolStripItem
是否具有焦点(Selected
属性)。如果是,它将使用其 Tag
属性来获取帮助关键字。现在,我们只需要设置 ToolStrip
及其项目以使用我们的帮助提供程序
// Register the tool strip at the help provider with an empty keyword.
helpProvider1.SetHelpKeyword(toolStrip1, "");
helpProvider1.SetHelpNavigator(toolStrip1, HelpNavigator.Topic);
// Set help keywords for the toolstrip buttons using Tag property.
toolStripButton1.Tag = "Chapter_3.htm";
toolStripButton2.Tag = "Chapter_4.htm";
toolStripButton3.Tag = "Chapter_5.htm";
完成了,现在 ToolStripButton
具有上下文相关帮助。
作为进一步的改进,您可能希望从 ToolStripButton
派生自己的类。该类将具有一个帮助关键字属性,而不是使用 Tag
属性。