C# 我想在打开主窗体后打开第二个窗体,但第二个窗体首先打开

C# 我想在打开主窗体后打开第二个窗体,但第二个窗体首先打开,c#,forms,C#,Forms,我试图在主窗体显示后立即打开一个辅助窗体,但是,相反,辅助窗体先显示,然后在辅助窗体关闭后显示主窗体(第二个窗体的作用类似于启动屏幕)。以下是一个例子: private void Form1_Load(object sender, EventArgs e) { doSomething1(sender, e); doSomething2(sender, e); // The new form I want to open after the

我试图在主窗体显示后立即打开一个辅助窗体,但是,相反,辅助窗体先显示,然后在辅助窗体关闭后显示主窗体(第二个窗体的作用类似于启动屏幕)。以下是一个例子:

private void Form1_Load(object sender, EventArgs e)
    {
        doSomething1(sender, e);
        doSomething2(sender, e);
        // The new form I want to open after the main form.
        Form2 f2 = new Form2();
        doSomething3(sender, e);
    }
    private void doSomething1(object sender, EventArgs e)
    {
        // Do something here...
    }
    private void doSomething2(object sender, EventArgs e)
    {
        // Do something here...
    }
    private void doSomething3(object sender, EventArgs e)
    {
        // Do something here...
    }

使用
表单1。显示的
事件,而不是
加载
事件:

private void Form1_Shown(Object sender, EventArgs e) {
    doSomething1(sender, e);
    doSomething2(sender, e);
    // The new form I want to open after the main form.
    Form2 f2 = new Form2();
    doSomething3(sender, e);
}

或者,根据
doSomething1
doSomething2
是否正在执行用户不需要看到的后台处理:您可以将这两个任务保留在加载处理程序中,只需将最后两条语句移动到显示的
处理程序中。

在构造函数中,首先初始化显示的
事件处理程序:

public Form1()
    {
        InitializeComponent();

        this.Shown += new EventHandler(Form1_Shown);
    }
然后把代码放在那里:

void Form1_Shown(object sender, EventArgs e)
    {
      doSomething1(sender, e);
      doSomething2(sender, e);
      // The new form I want to open after the main form.
      Form2 f2 = new Form2();
      doSomething3(sender, e);
   }

您应该将其放在主窗体的show处理程序中,而不是loadhandler.Asad中,这对我来说很有效。谢谢很高兴听到这个消息!Winforms中事件的顺序可能有点棘手;您可能想看看这篇文章:有关触发每种类型事件的顺序的更多信息。
public Form1()
{
    InitializeComponent();

    Form2 f2 = new Form2();
    f2.Show();