首页 > 解决方案 > 是否可以修改 Help.ShowHelp API 以简单地调用 CHM 文件?

问题描述

这是我在WinForm按钮单击处理程序中显示帮助主题的主要方式:

private void buttonHelp_Click(object sender, EventArgs e)
{
    CutTools.DisplayHelpTopic(this, "create-new-viewport.htm");
}
public static void DisplayHelpTopic(Control parent, string topic)
{
    try
    {
        // Use an empty form as the parent so that the help file will not block the CAD software
        Form mHelpParent = new Form();

        // Use location of this DLL file
        System.Reflection.Module mod = parent.GetType().Module;
        string path = Path.GetDirectoryName(mod.FullyQualifiedName);

        Help.ShowHelp(mHelpParent,
            Path.Combine(path, "cut-tools-help.chm"), HelpNavigator.Topic, topic);
    }
    catch (System.Exception ex)
    {
        _AcAp.Application.ShowAlertDialog(
                            string.Format("\nError: {0}\nStackTrace: {1}", ex.Message, ex.StackTrace));
    }
}

表格显示在 AutoCAD、BricsCAD 或 ZWCAD 中。关于是好的和伟大的。但是,如果我想简单地显示 CHM 文件本身(因此没有可用的实际表格),我必须这样做:

[CommandMethod("TS_DisplayHelp")]
public void TS_DisplayHelp()
{
    // Use location of this DLL file
    System.Reflection.Module mod = GetType().Module;
    System.Diagnostics.Process.Start(
        Path.Combine(Path.GetDirectoryName(mod.FullyQualifiedName), "cut-tools-help.chm"));
}

它有效,但有一个缺点。它产生一个新的帮助实例,并且不使用相同的实例。

例如:

鉴于TS_DISPLAYHELP我无法弄清楚如何Help.ShowHelp在我的按钮单击处理程序中直接使用。

标签: c#chmautocad-pluginbricscadzwcad

解决方案


目前我已经设法通过DisplayHelpTopic直接在命令TS_DISPLAYHELP方法中复制代码来解决这个问题:

[CommandMethod("TS_DisplayHelp")]
public void TS_DisplayHelp()
{
    try
    {
        // Use an empty form as the parent so that the help file will not block the CAD software
        Form mHelpParent = new Form();

        // Use location of this DLL file
        System.Reflection.Module mod = GetType().Module;
        string path = Path.GetDirectoryName(mod.FullyQualifiedName);

        Help.ShowHelp(mHelpParent,
            Path.Combine(path, "cut-tools-help.chm"), HelpNavigator.Topic, "command-index.htm");
    }
    catch (System.Exception ex)
    {
        _AcAp.Application.ShowAlertDialog(
                            string.Format("\nError: {0}\nStackTrace: {1}", ex.Message, ex.StackTrace));
    }
}

我知道我的默认主题是"command-index.htm".


我对上述决议感到满意。


推荐阅读