1

我有个问题:

这是我的情况:

每次用户选择它时,我已经命令调用一个 NewForm。MainForm 在我运行程序时被调用,当我单击“NewForm”时,FirstNewForm 被调用并且 MainForm 被关闭。但是,当我在创建的 FirstNewForm 中再次单击“NewForm”时,它调用了 SecondNewForm,但 FirstNewForm 并没有被关闭。

这是我的问题:

如何关闭 FirstNewForm?我的意思是,当我调用 NewForm 时如何关闭 CurrentForm?

这是当我在 MainForm 仍然在那里时命令“NewForm”时的图像,并且在调用 FirstNewForm 时 MainForm 关闭:(如果您在任务栏中看到,那里只有一个销售系统程序):(第一张图像是 MainForm ,第二个图像是 FirstNewForm,它看起来一样,因为当我调用 FirstNewForm 时 MainForm 已经关闭):

在此处输入图像描述

在此处输入图像描述

这是当我在 FirstNewForm 仍然在那里时命令“NewForm”时的图像,并且在调用 SecondNewForm 时 FirstNewForm 没有被关闭:(如果你在任务栏中看到,那里有两个销售系统程序,所以 FirstNewForm 是未关闭)

在此处输入图像描述

如何隐藏和关闭 FirstNewForm?

这是代码:

private void AddNewForm(object sender, EventArgs e)
    {
        //this.Hide();
        Form newForm = new Form();
        AddObjects(sender, e, newForm);
        UpdateTextPosition(sender, e, newForm);

        newForm.Size = new Size(1360, 735);
        newForm.Text = "Selling System";
        newForm.FormBorderStyle = FormBorderStyle.Fixed3D;
        newForm.AutoScaleMode = AutoScaleMode.Font;
        newForm.AutoScroll = true;
        newForm.AutoSizeMode = AutoSizeMode.GrowAndShrink;
        newForm.StartPosition = FormStartPosition.CenterScreen;
        newForm.MaximizeBox = false;
        newForm.Controls.Add(label1);
        newForm.Controls.Add(label2);
        newForm.Controls.Add(label3);
        newForm.Controls.Add(label4);
        newForm.Controls.Add(label5);
        newForm.Controls.Add(label6);
        newForm.Controls.Add(label7);
        newForm.Controls.Add(menuStrip1);

        //newForm.ShowDialog();

        //this.Close();

        if(this.InvokeRequired)
        {
            Action act = () =>
            {
                this.Hide();
            };

          this.Invoke(act);
        }

        else
        {
          this.Hide();
        }
    }

提前致谢!对不起,如果我发了很长的帖子

4

2 回答 2

1

ShowDialog导致显示模式对话框。这意味着,呼叫newForm.ShowDialog()将被阻止,并且this.Close()只有在您关闭新表单后才能到达。您可以在退出程序时调用this.Hide()主窗体使其不可见并一起关闭所有窗体:

this.Hide();

newForm.ShowDialog();

this.Close();

编辑

看起来您的调用可能this.Hide()没有正确分派到 UI 线程,因此它拒绝隐藏表单。尝试

if(this.InvokeRequired){
     Action act = () => {
          this.Hide();
     }
     this.Invoke(act)
}
else{
     this.Hide();
}

'其他编辑

private void AddNewForm(object sender, EventArgs e)
{
    ...

    if(this.InvokeRequired)
    {
        Action act = () =>
        {
            this.Hide();
        };

      this.Invoke(act);
    }

    else
    {
      this.Hide();
    }

    newForm.ShowDialog();

}
于 2013-08-21T07:31:53.770 回答
0

在主窗体上您必须将 OnFormClosed 分配给两个子窗体事件处理程序。在那里您可以做出适当的反应并控制每个子窗体的行为,因为它应该完成。

于 2013-08-21T07:28:03.830 回答