在c#中控制多个窗体的显示、隐藏或关闭

本文关键字:显示 隐藏 窗体 控制 | 更新日期: 2023-09-27 17:49:20

我希望能够在一个表单中显示,隐藏或关闭一些其他表单。我的想法是,我的程序从一个表单开始,有一些按钮将显示其他表单。也就是说,如果用户点击一个按钮来打开另一个表单,这个主表单应该最小化,当用户关闭另一个表单时,这个表单将恢复到正常或最大化状态。

控制其他表单的主表单(Form1.cs)的代码如下:

namespace MultipleForms
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    /* 
     * I want to make a public reference to this Form1
     * So that when user closes Form2 That is F2 this form will be
     * set back to normal or maximized state
     */ 
    private void buttonStartForm2_Click(object sender, EventArgs e)
    {
        //Declare Form2
        Form2 F2 = new Form2();
        //Show Form2
        F2.Show();
        //Minimize Form1
        this.WindowState = FormWindowState.Minimized;
    }
}
}

这是form2。cs

    namespace MultipleForms
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //FormClosed event handler
        private void Form2_FormClosed(object sender, FormClosedEventArgs e)
        {
            //Closing Form2
            this.Close();
            //Now I need a code to make Form1 to recover from minimized
            // state to normal or maximized state. how do I should refer to it?
        }
    }
}

我想我必须做一些东西在表单关闭事件,但我怎么能初始化的Form1.cs作为公共的东西?或者我也应该在form2。cs中初始化form1。cs ?或者可以通过Program.cs文件完成:

namespace MultipleForms
{
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}
}

p。S:关键是Form2应该关闭,而不是隐藏

使用Hans的解决方案,最好这样使用:

    private bool isEnabledCmpFrm = false;
    public void buttonStartComparisonForm_Click(object sender, EventArgs e)
    {
        if (!isEnabledCmpFrm)
        {
            ComparisonForm CmpFrm = new ComparisonForm();
            CmpFrm.Show();
            CmpFrm.WindowState = FormWindowState.Normal;
            this.WindowState = FormWindowState.Minimized;
            isEnabledCmpFrm = true;
            CmpFrm.FormClosed += delegate
            {
                this.WindowState = FormWindowState.Normal;
                isEnabledCmpFrm = false;
            }; 
        }
    }

在c#中控制多个窗体的显示、隐藏或关闭

如果我理解正确的话,你可以钩入Form Closing事件。

在主表单中你可以这样写:

Form2 form2 = new Form2();
form2.Show();
form2.FormClosing += new FormClosingEventHandler(form2_FormClosing);

    void form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Show();
    }

不要让表单侦听自己的事件。代码需要输入Form1。这样的:

        Form2 F2 = new Form2();
        F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; };
        F2.Show();
        this.WindowState = FormWindowState.Minimized;

您需要将对主表单的引用传递给子表单,并使用主表单的show方法使其在子表单关闭时再次可见。