2017-08-10 92 views
2

當我從Windows窗體應用程序打開幫助文件時,我正在使用此代碼。當點擊Url或打印按鈕時,Chm文件會凍結應用程序

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

它工作正常,除非當我單擊幫助文件中的GO> URL ...或打印按鈕。 [1]

我沒有收到消息,應用程序和chm文件根本沒有響應。我需要去任務管理器並殺死進程。我不知道它是什麼。

我試圖用簡單的Windows窗體應用程序使用相同的代碼打開相同的文件,只有一種形式,一切都很完美。所以我認爲我的應用程序出了問題。

什麼會導致此類問題? 這是一個擁有大量屏幕的大型企業應用程序。

+0

當你從shell(windows文件資源管理器)打開CHM文件並轉到> URL時,它會工作嗎?你是通過什麼作爲父'(ShowHelp(...)'?第一個參數?整個主機窗體或特定的控制? – dlatikay

+0

@dlatikay我試圖添加null,新的Form()和主窗口,並始終 –

+0

您是否試過(仔細地)刪除[.chm文件中描述的hh.dat文件在某些​​文件夾中無法以編程方式訪問](https:/ /stackoverflow.com/questions/41488501/chm-file-is-not-programmatically-accessible-in-some-folders/41661701#41661701)? –

回答

2

所有問題首先是不太清楚描述:

  • 應該提到的是,CHM文件由NuHelp產生(這是治標不治本,但我們都知道臨時始終是永久性的,是吧?))
  • dummyFormForHelp.Value說這裏沒有什麼,這是形式的只是懶惰初始化實例,以防止幫助窗口的最頂端位置,並允許應用程序之間切換,並幫助

dummyFormForHelp.Value表示:

private static readonly Lazy<Form> dummyFormForHelp = new Lazy<Form>(() => 
{ 
    var form = new Form(); 
    form.CreateControl(); 
    return form; 
}); 

返回與WinForms的原始問題<> CHM幫助:

  • 只有在幫助打開時纔會出現問題通過應用程序,如果幫助是直接打開 - 在所有
  • 無休止的循環中沒有問題,在100%的導航到URL,打印或在搜索選項卡中鍵入任何世界時陷入

研究表明,隨着冷凍應用您的問題並打開CHM不是唯一的:

解決方案解決問題的

方式:

  • 嘗試的NuHelp
  • 嘗試不同的轉換器的最後一個版本,並檢查它是否可以幫助
  • 不要使用任何轉換器和生成的幫助文件在自己的
  • 開始幫助不同的過程

開始幫助不同的過程

HH被添加到Windows路徑,所以這樣命令可以輕鬆執行:

hh "help.chm::/topic.html" 

hh "help.chm::/topic.html#subtopic" 

hh -mapid 12345 help.chm 

解決方法的缺點:每次從應用程序調用幫助將打開n例如幫助。

編輯:28/08/2017

對於未來的讀者:

  • 重新編譯由不同的常用的轉換器並沒有幫助
  • 幫助與幫助&手冊重建,
  • 索引已返回且關鍵字配置正確,搜索已返回
  • 致電使用hh

現在的幫助按預期工作。

+0

P.S.在stackoveflow上給同事一個答案是很有趣的:-) –

+0

_首先所有的問題都不是很清楚描述_ - 同意。 –

2

用於打開CHM的代碼片段似乎並不乾淨(??? dummyFormForHelp.Valueconstant)。 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

從我的示例應用程序的截圖上面所有下面的代碼是爲我工作。請嘗試您的需求。打開網址在這裏是特殊的,而不是在你的屏幕截圖中顯示的網址(網址...)。

#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's Diagnostics是一個小型實用程序,它報告是否安裝了所有HTML Help運行庫& DLL並將其註冊到正確的位置。如果你有編譯器崩潰,並且在簡單地打開一個CHM或者從CHM搜索選項卡搜索時崩潰,那麼這個實用程序將幫助你理清咒罵DLL的問題。

+0

不幸的是,它並沒有幫助,問題不在於打開chm文件(這是正確完成的),而是爲什麼在chm中執行某些操作時應用程序被凍結(例如,在搜索中輸入任何內容) –

+0

感謝您的工具! –

相關問題