65.9K
CodeProject 正在变化。 阅读更多。
Home

工具栏项的上下文帮助

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.44/5 (7投票s)

2008年7月9日

CPOL

1分钟阅读

viewsIcon

37517

downloadIcon

204

如何将上下文相关帮助绑定到 .NET 工具栏项目。

引言

.NET Framework 中的 Windows Forms 库对上下文相关帮助提供了很好的支持。您可以为程序中的每个控件分配一个帮助主题。只要控件获得焦点,该主题就会自动显示,只需按下 F1 即可。

当您尝试对 ToolStrip 项目(例如 ToolStripButtonToolStripComboBox)执行此操作时,会出现问题。这些类不是控件,它们不是从 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 属性。

© . All rights reserved.