当我从Windows窗体应用程序打开帮助文件时,我使用此代码。
public static void ShowHelp(string constant)
{
Help.ShowHelp(dummyFormForHelp.Value, CHMFile, HelpNavigator.Topic, constant);
}
除非我点击帮助文件中的GO> URL ...或打印按钮,否则它工作正常。 [
我没有收到任何消息,app和chm文件根本没有响应。我需要去任务管理器并终止这个过程。我不知道它是什么。
我尝试使用简单的Windows窗体应用程序中的相同代码打开同一个文件,只有一个窗体,一切都很完美。所以我觉得我的申请有些不对劲。
导致此类问题的原因是什么? 它是一个拥有大量屏幕的大型企业应用程序。
答案 0 :(得分:2)
打开CHM的代码段似乎不干净(??? dummyFormForHelp.Value
,constant
)。 Help.ShowHelp()
就像是旧的HTMLHelp API调用的包装器(另请参阅:HTMLHelp API - VBA, VB6 und VB2003)。参数有点顽固。
第二个想法 - 请阅读HTMLHelp API - HH_CLOSE ALL Note并交叉检查您的代码。由于HH API中存在错误,请确保在主窗体的Query_Unload事件中调用此函数而不是OnClose。
请使用正确的参数调用Help.ShowHelp()
函数,如下所示。
Help.ShowHelp(this, CHMFile, HelpNavigator.Topic, "foobar.htm");
从上面的示例应用截图中,以下所有代码都适用于我。请尝试满足您的需求。打开的URL在这里很特别,而不是屏幕截图中显示的URL(URL ...)。
#region mnuHelp ---------------------------------------------
private void mnuHelpContents_Click(object sender, EventArgs e)
{
//--- Show contents of help file.
Help.ShowHelp(this, helpProviderMain.HelpNamespace);
}
private void mnuHelpIndex_Click(object sender, EventArgs e)
{
//--- Show index of help file.
Help.ShowHelpIndex(this, helpProviderMain.HelpNamespace);
}
private void mnuHelpSearch_Click(object sender, EventArgs e)
{
//--- Show search tab of help file.
Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.Find);
}
private void mnuHelpTest_Click(object sender, EventArgs e)
{
//--- Show a web site with help content.
Help.ShowHelp(this, "http://www.stackoverflow.com");
}
private void mnuHelpOpenTopicByName_Click(object sender, EventArgs e)
{
//--- Open topic by name.
Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.Topic, "Garden/tree.htm");
}
private void mnuHelpOpenTopicById_Click(object sender, EventArgs e)
{
//--- Open topic by ID.
Help.ShowHelp(this, helpProviderMain.HelpNamespace, HelpNavigator.TopicId, "20010");
}
#endregion -----------------------------------------------
修改强>
下载并运行我们的MJ's Diagnostics工具。
MJ的诊断程序是一个小型实用程序,可报告所有HTML帮助运行时& Workshop(编译器)DLL已安装并注册到正确的位置。如果您有编译器崩溃,并在打开CHM时崩溃,或从CHM搜索选项卡搜索时崩溃,则此实用程序将帮助解决胭脂DLL问题。
答案 1 :(得分:2)
首先提出的问题并不十分清楚:
dummyFormForHelp.Value
在这里什么都没说,它只是懒惰的初始化形式实例,以防止帮助窗口的最高位置并允许在应用程序和帮助之间切换 dummyFormForHelp.Value
表示:
private static readonly Lazy<Form> dummyFormForHelp = new Lazy<Form>(() =>
{
var form = new Form();
form.CreateControl();
return form;
});
使用WinForms&lt;&gt; CHM帮助返回原始问题:
研究表明,冻结应用程序和打开的chm的问题不是唯一的:
<强>解决方案强>
解决问题的方法:
以不同的流程启动帮助 :
hh被添加到Windows路径中,因此可以轻松执行这些命令:
hh "help.chm::/topic.html"
hh "help.chm::/topic.html#subtopic"
hh -mapid 12345 help.chm
变通方法的缺点:每次应用程序的帮助调用都会打开新的帮助实例。
编辑:28/08/2017
对于未来的读者:
hh
,正在使用现在帮助按预期工作。
答案 2 :(得分:0)
这是Windows 10的一个错误,已在Windows 10,v1607 / build 14393中得到修复。
至少在Windows 10,v1507 / build 10240和v1511 / build 10586中存在。 (我为此主题创建了Connect issue,但不幸的是,该网站不再可访问。)