使用HelpProvider类来显示帮助,UI总是在帮助窗口后面

Dav*_* A. 7 .net c# winforms

我有一个使用HelpProvider类的C#Winforms应用程序.每当我按F1以显示帮助时,帮助窗口将始终位于我的应用程序之上,我无法将应用程序UI置于前台.我仍然可以与我的用户界面进行互动,但帮助窗口仍会保留在最顶层.

这是由HelpProvider设计的吗?或者我错过了什么?

Jen*_*Ari 7

这个问题有一个解决方案,有点脏,但它有效.问题是,HelpProvider打开的帮助窗口始终位于其父窗口控件之上,该窗口控件由第一个参数中的Control实例确定Help.ShowHelp.即使您null在那里指定,主申请表仍然用作父窗口.为避免这种情况,可以创建一个虚拟表单,该表单将用作帮助父表单.这个表单将永远不会显示,但仍然,帮助窗口将"在其上面",实际上不在所有其他应用程序窗口之上.

public static class AppHelp
{
   private static Form mFrmDummyHost = new Form();

   public static void ShowChm()
   {
      Help.ShowHelp(mFrmDummyHost, "my_help.chm");
   }
}
Run Code Online (Sandbox Code Playgroud)

当然,所有其他Help.ShowHelp重载也可以这种方式调用.

希望这有助于像我这样的人,寻找永不老问题的答案;)


Jon*_*lis 3

这确实是设计使然,而且我没有意识到。我刚刚重新编译了我的最后一年项目并确认了它。我已经阅读过相关内容,基本上每次单击表单时帮助文件都会设置为 TopMost=True 。这意味着即使您将表单编码为 TopMost,只要您单击帮助文件,它就会再次回到顶部。

我确实相信,如果您使用启动流程,它应该可以解决问题,但会失去帮助提供商提供的一些可定制性。

private void textBox1_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e)
{
  if(e.KeyCode ==Keys.F1)
  {
    System.Diagnostics.Process.Start(@"C:\WINDOWS\Help\mspaint.chm");
  }
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你