我有一个使用HelpProvider类的C#Winforms应用程序.每当我按F1以显示帮助时,帮助窗口将始终位于我的应用程序之上,我无法将应用程序UI置于前台.我仍然可以与我的用户界面进行互动,但帮助窗口仍会保留在最顶层.
这是由HelpProvider设计的吗?或者我错过了什么?
这个问题有一个解决方案,有点脏,但它有效.问题是,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重载也可以这种方式调用.
希望这有助于像我这样的人,寻找永不老问题的答案;)
这确实是设计使然,而且我没有意识到。我刚刚重新编译了我的最后一年项目并确认了它。我已经阅读过相关内容,基本上每次单击表单时帮助文件都会设置为 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)
希望能帮助到你
| 归档时间: |
|
| 查看次数: |
5882 次 |
| 最近记录: |