c# - 单击 Url 或打印按钮时,chm 文件会卡住应用程序

标签 c# winforms chm

当我从我的 Windows 窗体应用程序打开帮助文件时,我正在使用此代码。

    public static void ShowHelp(string constant)
    {
        Help.ShowHelp(dummyFormForHelp.Value, CHMFile, HelpNavigator.Topic, constant);
    }

它工作正常,除非我在帮助文件中单击 GO>URL... 或打印按钮。 [ 1]

我没有收到消息,应用程序和 chm 文件根本没有响应。我需要去任务管理器并终止进程。我不知道它是什么。

我尝试使用来自只有一个窗体的简单 Windows 窗体应用程序的相同代码打开同一个文件,一切都很完美。所以我认为我的申请有问题。

什么会导致这样的问题? 这是一个拥有大量屏幕的大型企业应用程序。

最佳答案

打开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");

enter image description here

从我上面的示例应用程序屏幕截图来看,以下所有代码都适用于我。请尝试您的需求。 Open 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 搜索选项卡搜索时崩溃,那么此实用程序将帮助解决 rouge DLL 问题。

关于c# - 单击 Url 或打印按钮时,chm 文件会卡住应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614137/

相关文章:

c# - 如何让Serilog丰富日志

.Net Treeview 事件处理

.net - 我如何在 UltraWinGrid 中设置自定义字体?

c# - 通用 Windows 窗体模板

c++ - 使用命令行参数在特定页面/主题打开 .chm 文件

windows-7 - 虚拟机中的 .chm 文件不会显示

c# - 使用带有智能卡证书的signedCms 时出错

c# - 参数和列表哪个更好

c# - 为什么我不能将 (1<<31) 分配给 ulong 变量? (错误25常数值...无法转换...)

java - 编译Java文件,其中包含外部文件。 (CHM)