1

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

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

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

闪屏是一种简单的形式。ShowSplashScreen 方法创建表单并显示它,CloseSplashScreen 关闭表单。

一切似乎都正常,除了当启动屏幕关闭时,主窗体失去焦点并被先前选择的窗口隐藏。

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

4

3 回答 3

4

尝试调用激活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

注册您FormOnShown事件并调用将TopMost标志设置为 true:

form1.OnShown += OnShownHandler;

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