C# - 如何从其他表单关闭创建的表单窗口

时间:2017-06-18 14:32:53

标签: c# forms visual-studio

我在Form1中创建了一个创建新表单的函数。

private void makeForm(String option) {

        Form formWin = new Form();
        formWin.TopMost = true;
        formWin.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        formWin.Size = new Size(500,600);
        formWin.StartPosition = FormStartPosition.Manual;
        formWin.Location = new Point(1366 - formWin.Size.Width , 768 - formWin.Size.Width);
        formWin.BackColor = Color.White;
        formWin.TransparencyKey = Color.White;

        var formWinModel = new PictureBox
        {
            Name = "formWin",
            Size = new Size(formWin.Size.Width, formWin.Size.Height),
            SizeMode = PictureBoxSizeMode.Zoom,
            Image = Trans.Properties.Resources.Form_Special,
            Location = new Point(0, 0),
        };

        formWin.Controls.Add(formWinModel);

        if (option == "show")
        {
            formWin.Show();
        }

        if (option == "exit") {
            formWin.Visible = false;
            formWin.Close();
            formWin.Dispose();
        }
    }

当我使用makeForm(“show”)时,它将创建formWin表单。但如何关闭形式。我使用了makeForm(“exit”),但它不起作用。

由于

2 个答案:

答案 0 :(得分:1)

您已创建模态窗口,这意味着在formWin处于活动状态时,无法访问上一个表单(您打开的表单formWin)。如果您希望同时访问这两个表单,则应使用formWin.Show()代替。

您的方法无论如何都无法工作,因为您正在寻找一个无法关闭的局部变量(窗体),您应该在方法之外声明Form formWin并将值保存到此变量中。当你以后想要关闭它。但是这会引起一些其他问题,例如如果你想同时创建多个表单怎么办?哪个问题是你的整个逻辑,为什么甚至关闭你之前的表格中的表格?

答案 1 :(得分:-2)

private Form formWin = null;
private void makeForm(String option)
{
    if(formWin == null)
    {
        formWin = new Form();
        formWin.TopMost = true;
        formWin.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        formWin.Size = new Size(500, 600);
        formWin.StartPosition = FormStartPosition.Manual;
        formWin.Location = new Point(1366 - formWin.Size.Width, 768 - formWin.Size.Width);
        formWin.BackColor = Color.White;
        formWin.TransparencyKey = Color.White;

        var formWinModel = new PictureBox
        {
            Name = "formWin",
            Size = new Size(formWin.Size.Width, formWin.Size.Height),
            SizeMode = PictureBoxSizeMode.Zoom,
            Image = Trans.Properties.Resources.Form_Special,
            Location = new Point(0, 0),
        };

        formWin.Controls.Add(formWinModel);
    }            

    if (option == "show")
    {
        formWin.Show();
    }

    if (option == "exit")
    {
        formWin.Visible = false;
        formWin.Close();
        formWin.Dispose();
        formWin = null;
    }
}

您应该在makeForm函数中创建formWin varibale。我希望它可以帮到你。