2012-05-21 21 views
1

我爲WinForm應用程序創建了一個非常基本的啓動畫面。WinForm啓動畫面和焦點

應用程序有連接到上裝載一個數據庫,所以我創建一個方法的OnLoad像這樣的:

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

初始屏幕是一個簡單的表格。 ShowSplashScreen方法創建表單並顯示它,CloseSplashScreen關閉表單。

除了當啓動畫面關閉時,一切似乎都奏效,主窗體失去焦點並被先前選擇的窗口隱藏。

我不明白爲什麼,也不知道如何解決這個問題。

+1

倘使我們知道這些功能做的正是(顯示和關閉) –

回答

4

嘗試調用ActivateSplashScreen.CloseSplashScreen();

MainForm.Activate(); 
+0

簡單的工作,謝謝。 – Cristiano

+0

@Cristiano歡迎您:) – Icarus

1

你應該differentlly做到這一點。初始屏幕可以在主窗體之前調用,這就是你如何做到的(代碼如下)。 通過使用DialogResult.OK,將代碼返回到Program類,並繼續創建(並打開)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

註冊您FormOnShown事件並調用TopMost標誌設置爲true:

form1.OnShown += OnShownHandler; 

private void OnShownHandler(EventArgs e) 
{ 
    form1.TopMost = true; 
}