Используя класс HelpProvider для отображения справки, пользовательский интерфейс всегда находится за окном справки - PullRequest
7 голосов
/ 26 августа 2010

У меня есть приложение C # Winforms, которое использует класс HelpProvider. Всякий раз, когда я нажимаю F1, чтобы вызвать справку, окно справки всегда будет в верхней части моего приложения, я не могу вывести пользовательский интерфейс приложения на первый план. Я все еще могу взаимодействовать с моим пользовательским интерфейсом, но окно справки останется сверху.

Это дизайн HelpProvider? Или я что-то упустил?

Ответы [ 2 ]

7 голосов
/ 18 августа 2011

Есть решение этой проблемы, немного грязное, но оно работает. Дело в том, что окно справки, открываемое 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");
   }
}

Конечно, все другие Help.ShowHelp перегрузки также могут быть названы таким образом.

Надеюсь, это поможет таким людям, как я, в поиске ответов на вопросы, которые никогда не устареют;)

3 голосов
/ 28 августа 2010

Это действительно задумано, и это то, чего я не осознавал. Я только что перекомпилировал свой последний год проекта и подтвердил его. Я прочитал об этом, и в основном файл справки установлен на 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");
  }
}

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...