我在编译的html帮助文件中遇到此问题,该文件在Microsoft Visual Studio 2010上运行。
注意:我没有足够的信誉点来发布图片。请忍受我的问题。
已编译的html帮助文件的名称为 GeneralHelp.chm 。为了使其显示,有两种方法:
我不修改属性的默认值,但这里是激活的c#代码:
private void generalToolStripMenuItem_Click(object sender, EventArgs e)
{
Help.ShowHelp(this, Application.StartupPath + @"\GeneralHelp.chm");
}
private void mdiMain_Load(object sender, EventArgs e)
{
helpProviderGeneral.HelpNamespace = Application.StartupPath + @"\GeneralHelp.chm";
}
第一种方法是正常工作,但第二种方式(当主窗体仅处于活动状态时按F1键)不是。它有一条消息显示“此程序无法显示网页”。我尝试重建.chm文件,但它仍然发生。
此外,我发现当我首先点击其他链接,然后点击我想在导航窗格中看到的页面时,它变得正常。我的其他.chm文件不能以这种方式工作。我还将它保存在适当的文件夹中:Debug和Release。此外,GeneralHelp.chm的拼写和大小写是正确的。最后,当我尝试在MS Visual Studio 2010之外打开GeneralHelp.chm时,这很正常。
如果您需要更多信息,请发表评论,我会回答。我真的很想知道如何解决这个问题。感谢您阅读本文的时间,我期待着给我一个解决方案。
答案 0 :(得分:0)
您可以将helpProvider1.HelpNamespace想象为.chm帮助文件的链接。因此,不能调用这种方式的帮助主题。您必须了解CHM帮助文件的内部结构作为根节点。想想具有(子)目录和HTML主题的Web服务器上的结构化网页("主页"),例如@" /Garden/flowers.htm"
正如前面提到的其他注释(见上文)所述,请确保将.chm文件复制到EXE项目的bin \ Debug目录中。
在代码示例中,我在开头设置了常量。 CHM帮助文件的示例取决于技术编写者如何编译它们,例如使用HTMLHelp Workshop或其他帮助创作工具,用于表示可能性。
请注意内联注释://为此表单设置F1帮助主题... //并为此表单的某些控件设置F1帮助主题(每个控件两行)。
namespace C_Sharp_CHM
{
/// <summary>
/// Using C# und CHM files.
/// </summary>
public partial class frmMain : Form
{
private const string sHTMLHelpFileName_ShowSingleHelpWindow = @"\help\CHM-example_ShowSingleHelpWindow.chm";
private const string sHTMLHelpFileName_ShowWithNavigationPane = @"\help\CHM-example_ShowWithNavigationPane.chm";
private const string sHTMLHelpFileName_ShowWithoutAutoSync = @"\help\CHM-example.chm";
public frmMain()
{
InitializeComponent();
}
...
private void frmMain_Load(object sender, EventArgs e)
{
// example: System.Diagnostics.Process.Start(Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync);
webBrowser1.Navigate(new Uri(GetChmUrl(Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync, "Garden/garden.htm")));
if ((chkShowHelpWithNavigationPane.Checked == true))
{
helpProvider1.HelpNamespace = Application.StartupPath + sHTMLHelpFileName_ShowWithoutAutoSync;
}
else
{
helpProvider1.HelpNamespace = Application.StartupPath + sHTMLHelpFileName_ShowSingleHelpWindow;
}
// set F1 help topic for this form
helpProvider1.SetHelpNavigator(this, HelpNavigator.Topic);
helpProvider1.SetHelpKeyword(this, @"index.htm");
// and set F1 help topic for some controls of this form (two lines per control)
helpProvider1.SetHelpNavigator(this.btnPopulate, HelpNavigator.Topic);
helpProvider1.SetHelpKeyword(this.btnPopulate, @"/Garden/flowers.htm");
helpProvider1.SetHelpNavigator(this.btnExit, HelpNavigator.Topic);
helpProvider1.SetHelpKeyword(this.btnExit, @"/Garden/tree.htm");
helpProvider1.SetHelpNavigator(this.chkShowHelpWithNavigationPane, HelpNavigator.Topic);
helpProvider1.SetHelpKeyword(this.chkShowHelpWithNavigationPane, @"/HTMLHelp_Examples/jump_to_anchor.htm#AnchorSample");
helpProvider1.SetHelpNavigator(this.btnOpenHelpShowTopic, HelpNavigator.Topic);
helpProvider1.SetHelpKeyword(this.btnOpenHelpShowTopic, @"/HTMLHelp_Examples/image_and_text.htm");
}
private void btnOpenHelpShowTopic_Click(object sender, EventArgs e)
{
Help.ShowHelp(this.btnOpenHelpShowTopic, helpProvider1.HelpNamespace, HelpNavigator.Topic, @"/HTMLHelp_Examples/image_and_text.htm");
}