在mainForm之后调用两次的新窗口,但是第一个Form未关闭

时间:2013-08-21 07:24:29

标签: c# winforms

我有一个问题:

以下是我的案例:

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

这是我的问题:

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

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

enter image description here

enter image description here

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

enter image description here

如何隐藏和关闭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();
        }
    }

提前致谢!对不起,如果我发帖长篇

2 个答案:

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

'NOTHER EDIT

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

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

      this.Invoke(act);
    }

    else
    {
      this.Hide();
    }

    newForm.ShowDialog();

}

答案 1 :(得分:0)

在主窗体上您必须为两个子窗体都分配事件处理程序OnFormClosed。 在那里你可以做出正确的反应并控制每个孩子的形式行为。