WinForm启动画面和焦点

时间:2012-05-21 14:25:38

标签: c# winforms focus splash-screen

我为WinForm应用程序创建了一个非常基本的启动画面。

应用程序必须在加载时连接到数据库,因此我创建了一个像这样的OnLoad方法:

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

启动画面是一种简单的形式。 ShowSplashScreen方法创建表单并显示它,CloseSplashScreen关闭表单。

一切似乎都有效,除了当闪屏关闭时,主窗体失去焦点并被之前选择的窗口隐藏。

我不明白为什么,也不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:4)

尝试在SplashScreen.CloseSplashScreen();

之后致电Activate
MainForm.Activate();

答案 1 :(得分: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;
    }
}

答案 2 :(得分:-1)

OnShown事件注册Form,并将TopMost标志设置为true:

form1.OnShown += OnShownHandler;

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