2012-05-21 5 views
1

Я создал очень простой заставку для приложения WinForm.Заставка и фокус WinForm

Приложение имеет подключение к базе данных о загрузке, так что я создал метод OnLoad, как этот:

private void MainForm_OnLoad(object sender, EventArgs e) 
{ 
    SplashScreen.ShowSplashScreen(); 
    PerformConnection(); 
    SplashScreen.CloseSplashScreen(); 
} 

заставка является простой формой. Метод ShowSplashScreen создает форму и показывает ее, CloseSplashScreen закрывает форму.

Все работает, за исключением того, что при закрытии экрана заставки основная форма теряет фокус и скрывается ранее выбранным окном.

Я не понимаю, почему, и я не знаю, как решить эту проблему.

+1

бы помочь, если бы мы знали, что эти функции делают точно (шоу и близко) –

ответ

4

Try вызова Activate после SplashScreen.CloseSplashScreen();

MainForm.Activate(); 
+0

Просто работает, спасибо , – Cristiano

+0

@Cristiano приветствую :) – Icarus

1

Вы должны это сделать differentlly. Экран заставки можно вызвать перед основной формой, и так вы можете это сделать (код ниже). Используя DialogResult.OK, вернет код обратно в класс программы и продолжит создание (и открытие) Form1 (ваша основная форма).

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     using (SplashScreen sp = new SplashScreen()) 
     { 
      sp.StartPosition = FormStartPosition.CenterScreen; 
      if (login.ShowDialog() == DialogResult.OK) 
      { 
       Application.Run(new Form1()); 
      } 
     } 
    } 
} 


public partial class SplashScreen : Form 
{ 
    public SplashScreen() 
    { 
     InitializeComponent(); 
     DoTheWork(); 
    } 

    private void DoTheWork() 
    { 
     //... 
     //and on the end 
     this.DialogResult = DialogResult.OK; 
    } 
} 
-1

Зарегистрируйте Ваш Form для OnShown события и вызова установите TopMost флаг верно:

form1.OnShown += OnShownHandler; 

private void OnShownHandler(EventArgs e) 
{ 
    form1.TopMost = true; 
} 
Смежные вопросы