2011-08-10 8 views
9

Moja aplikacja używa technologii ClickOnce do wdrożenia. Jednak mam problem, gdy użytkownik zaczyna korzystać z aplikacji. Scenariusz do odtwarzania problem jest następujący:ClickOnce i nieaktywne okno główne

  1. Użytkownik klika na skrót do aplikacji w celu uruchomienia aplikacji pojawia
  2. okno
  3. ClickOnce za „Uruchamianie aplikacji”, aby sprawdzić dostępność aktualizacji
  4. „Uruchomienie aplikacji "okno dialogowe znika
  5. ekran powitalny pojawia
  6. Główne okno pojawia (okno logowania) - jednak nie jest aktywny i nie ma ostrości

Ponieważ główne okno nie jest aktywne, użytkownik musi kliknąć na nim, zanim będzie mógł rozpocząć wpisywanie nazwy użytkownika i hasła. Jak mogę rozwiązać ten problem, aby główne okno było aktywne po wyświetleniu? Próbowałem poniższy kod, ale to nie działa:

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

miałem dokładnie ten sam problem z jednym z moich aplikacji. Próbowałem wszelkich możliwych sposobów, aby uczynić to Skoncentrowanym Oknem na starcie, ale nic nie zadziałało. Nie wierzę, że jest to problem ClickOnce, ale nigdy nie znalazłem rozwiązania. Dodaję więcej paliwa do ognia. Daję +1, ponieważ jest to problem, który widziałem, ale nigdy nie udało mi się go rozwiązać. – RLH

+0

Dzięki RLH. Mam nadzieję, że ktoś wymyśli rozwiązanie. –

+0

Mam aplikację ClickOnce WinForms, której uruchomienie jest dokładnie takie, jak opisujesz, i nie napotkałem problemu, który opisałeś. Być może jest to bardziej problem WPF? –

Odpowiedz

0

wypróbować ten kod: pseudokod:

OnShown 
this.focus 

mi chodzi. Użyj innego zdarzenia.

+0

Już próbowałem. Niestety, bez powodzenia –

0

Mam aplikację WPF/ClickOnce i nie mam tego samego problemu. Nie używać StartupUri z App.xaml, ręcznie wyświetlić okno logowania zamiast w następujący 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();    
    } 
1

Najprawdopodobniej dajesz ostrość na ekranie powitalnym. Więc kiedy to się zamyka, nic już się nie skupia. Po zamknięciu formularza wywołaj metodę Select na kontrolce, którą chcesz ustawić fokus (pole tekstowe username zgaduję).

Select for Focus

0

Jak na moje rozumienie można programowo wywołać zdarzenie kliknij raz wewnątrz konstruktora.

0

Po zamknięciu ekranu powitalnego i wyświetleniu LoginForm?

0

Być może spróbuj skoncentrować się na TextBox w tym formularzu. Nazwa logowania na przykład.

Myślę, że zdarzenie OnInitialized może być zbyt wcześnie. OnShown powinno być dobre.

0

Czy używasz programu Visual Studio? Wiem, że jeśli przejdziesz do właściwości formularza w zakładce projektu, możesz określić obiekt początkowy. Być może możesz określić swój główny formularz, a ekran powitalny załaduje się przed nim.

0

próbowałeś:

protected override void OnInitialized(EventArgs e) 
{ 
    while (this.CanFocus) { this.Focus(); WPFWaitForPriority.WaitForPriority(DispatcherPriority.Background); } 
    base.OnInitialized(e); 
} 
Powiązane problemy