ClickOnce и неактивное главное окно - PullRequest
9 голосов
/ 10 августа 2011

Мое приложение использует технологию ClickOnce для развертывания. Однако у меня есть проблема, когда пользователь начинает использовать приложение. Сценарий воспроизведения проблемы следующий:

  1. Пользователь нажимает на ярлык приложения, чтобы запустить приложение
  2. Появится диалоговое окно «Запуск приложения» ClickOnce, чтобы проверить наличие обновлений
  3. Диалоговое окно «Запуск приложения» исчезает
  4. Появляется заставка
  5. Появляется главное окно (окно входа в систему) - однако оно не активно и не имеет фокуса

Поскольку главное окно не активно, пользователь должен щелкнуть по нему, прежде чем он сможет начать вводить имя пользователя и пароль. Как я могу решить эту проблему, чтобы главное окно было активным после его появления? Я пробовал следующий код, но он не работает:

protected override void OnInitialized(EventArgs e)
    {
       while (!this.IsFocused) { this.Focus(); WPFWaitForPriority.WaitForPriority(DispatcherPriority.Background); }
       base.OnInitialized(e);
    }

Ответы [ 8 ]

1 голос
/ 14 марта 2012

Скорее всего, вы фокусируете внимание на заставке.Поэтому, когда это закрывается, ничто больше не имеет фокуса.После закрытия формы вызовите метод выбора для элемента управления, на котором вы хотите сфокусироваться (я предполагаю, что текстовое поле имени пользователя).

Выбор фокуса

0 голосов
/ 20 апреля 2012

вы пробовали:

protected override void OnInitialized(EventArgs e)
{
   while (this.CanFocus) { this.Focus(); WPFWaitForPriority.WaitForPriority(DispatcherPriority.Background); }
   base.OnInitialized(e);
}
0 голосов
/ 19 апреля 2012

Вы используете Visual Studio? Я знаю, если вы перейдете в свойства формы на вкладке проекта, вы можете указать объект запуска. Возможно, вы можете указать свою основную форму, и заставка может загружаться перед ней.

0 голосов
/ 28 марта 2012

Может быть, попытаться сосредоточиться на TextBox в этой форме. Имя пользователя, например.

Я думаю, что событие OnInitialized может быть слишком рано. OnShown должен быть хорошим.

0 голосов
/ 26 марта 2012

Как насчет LoginForm.Activate() после закрытия заставки и отображения LoginForm?

0 голосов
/ 19 марта 2012

Насколько я понимаю, вы можете программно вызвать событие нажатия один раз внутри конструктора.

0 голосов
/ 13 марта 2012

У меня есть приложение WPF / ClickOnce, и у меня нет такой же проблемы.Я не использую StartupUri в App.xaml, вместо этого я вручную показываю окно входа в систему, как показано в App.xaml.cs:

protected override void OnStartup(StartupEventArgs e)
    {
        this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
        this.Exit += new ExitEventHandler(App_Exit);         
        base.OnStartup(e);
        ShowLogin();
    }

    private MainWindow _mainWindow;

    private void ShowLogin()
    {            

        _mainWindow = new MainWindow(delegate()
        {
            //.......
        });

        _mainWindow.Closed += new EventHandler(_mainWindow_Closed);

        this.MainWindow = _mainWindow;
        this.MainWindow.Show();            
    }
0 голосов
/ 10 августа 2011

попробуйте этот код: псевдокод:

OnShown
this.focus

Я имею в виду.Использовать другое событие.

...