C#winforms启动(启动)窗体未隐藏

C#winforms启动(启动)窗体未隐藏,c#,winforms,show-hide,C#,Winforms,Show Hide,我有一个winforms应用程序,其中我使用2个窗体来显示所有必要的控件。第一种形式是一个启动屏幕,它告诉用户它正在加载等。因此我使用以下代码: Application.Run( new SplashForm() ); 一旦应用程序完成加载,我希望SplashForm隐藏起来,或者将我发送到后面,并显示main from。我目前正在使用以下工具: private void showMainForm() { this.Hide(); this.SendToBack();

我有一个winforms应用程序,其中我使用2个窗体来显示所有必要的控件。第一种形式是一个启动屏幕,它告诉用户它正在加载等。因此我使用以下代码:

Application.Run( new SplashForm() );
一旦应用程序完成加载,我希望SplashForm隐藏起来,或者将我发送到后面,并显示main from。我目前正在使用以下工具:

private void showMainForm()
{
    this.Hide();
    this.SendToBack();

    // Show the GUI
    mainForm.Show();
    mainForm.BringToFront();
}

我看到的是显示了主窗体,但SplashForm仍然可见“在顶部”。我目前正在做的是单击main表单,手动将其放到前面。你知道为什么会发生这种情况吗?

也许你只是想关闭splash表单,而不是将其发送回去

我在单独的线程上运行splash表单(这是类splash表单):

主程序功能如下所示:

[STAThread]
static void Main(string[] args)
{
    SplashForm.ShowSplashScreen();
    MainForm mainForm = new MainForm(); //this takes ages
    SplashForm.CloseForm();
    Application.Run(mainForm);
}

若我理解正确,你们应该只使用Application.Run在你们的主窗体上运行。因此,您可以使用以下方法首先显示您的飞溅:

using(MySplash form = new MySplash())
   form.ShowDialog();
然后在MySplash中随时手动关闭它


或者在主窗体Load事件处理程序中显示它,然后等待它关闭或其他操作,直到Load方法完成。(可能在显示之前将Visible设置为false,然后再将其设置为true。

我认为这可能是我当前设计中的一个设计缺陷

我认为实现我所需要的最好方法是从主窗体控制一切。因此我可以使用:

Application.Run(new MainForm());

然后,这将负责显示/更新/隐藏闪屏。这样,我可以与主窗体管理的系统的其余部分进行必要的复杂操作。

这对于防止闪屏在关闭后窃取焦点并将主窗体推到后台至关重要:

protected override bool ShowWithoutActivation {
    get { return true; }
}

将此添加到您的splash form类。

对不起,我仅将其用于WinForms。我在您的类中定义了一个类似“frmSplash splashForm”的变量,但出现了一些错误,如“非静态字段、方法或属性需要对象引用”对于已定义的变量。我如何使用您的类?我遇到了一个奇怪的问题,我的启动屏幕在Win7中没有单独的线程,但在XP中它仍然位于其他内容之下,尽管有BringToFront()。我添加了上面的代码以将其放在自己的线程中,现在它的行为符合预期!因此,谢谢。感谢您共享此有用信息:)
protected override bool ShowWithoutActivation {
    get { return true; }
}