1

WinForm アプリケーションの非常に基本的なスプラッシュ スクリーンを作成しました。

アプリケーションはロード時にデータベースに接続する必要があるため、次のような OnLoad メソッドを作成しました。

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

スプラッシュ画面は単純なフォームです。ShowSplashScreen メソッドはフォームを作成して表示し、CloseSplashScreen メソッドはフォームを閉じます。

スプラッシュ スクリーンが閉じると、メイン フォームがフォーカスを失い、以前に選択したウィンドウによって非表示になることを除いて、すべてが機能しているように見えます。

理由がわかりません。また、この問題を解決する方法もわかりません。

4

3 に答える 3

4

後でActivateを呼び出してみてくださいSplashScreen.CloseSplashScreen();

MainForm.Activate();
于 2012-05-21T14:31:00.000 に答える
2

別の方法で行う必要があります。スプラッシュ スクリーンは、メイン フォームの前に呼び出すことができます。これがその方法です (以下のコード)。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;
    }
}
于 2012-05-21T14:34:45.747 に答える
-1

イベントに登録Formし、フラグを true にOnShown設定して呼び出します。TopMost

form1.OnShown += OnShownHandler;

private void OnShownHandler(EventArgs e)
{
    form1.TopMost = true;
}
于 2012-05-21T14:35:20.380 に答える