Help.ShowHelp API 可以修改为简单地调用 CHM 文件吗?
Can the Help.ShowHelp API be modified to simply invoke the CHM file?
这是我在 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"));
}
它有效,但有一个缺点。它生成了一个新的帮助实例,并且不使用相同的实例。
例如:
- 您启动其他命令之一并通过单击按钮显示帮助。你取消。
- 您启动不同的命令并通过单击按钮显示帮助。
Help.ShowHelp
使用相同的实例。
- 您可以通过
TS_DISPLAYHELP
命令和启动帮助,它会启动新实例。
考虑到 TS_DISPLAYHELP
的上下文,我不知道如何直接使用 Help.ShowHelp
,因为我可以在我的按钮点击处理程序中使用。
目前,我已经设法通过直接在命令 TS_DISPLAYHELP
方法中复制 DisplayHelpTopic
代码来解决这个问题:
[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"
。
我对上述决议很满意。
这是我在 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"));
}
它有效,但有一个缺点。它生成了一个新的帮助实例,并且不使用相同的实例。
例如:
- 您启动其他命令之一并通过单击按钮显示帮助。你取消。
- 您启动不同的命令并通过单击按钮显示帮助。
Help.ShowHelp
使用相同的实例。 - 您可以通过
TS_DISPLAYHELP
命令和启动帮助,它会启动新实例。
考虑到 TS_DISPLAYHELP
的上下文,我不知道如何直接使用 Help.ShowHelp
,因为我可以在我的按钮点击处理程序中使用。
目前,我已经设法通过直接在命令 TS_DISPLAYHELP
方法中复制 DisplayHelpTopic
代码来解决这个问题:
[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"
。
我对上述决议很满意。