управление несколькими формами показать, скрыть или закрыть с помощью одной формы в C # - PullRequest
0 голосов
/ 07 апреля 2011

Я хочу иметь возможность показывать, скрывать или закрывать некоторые другие формы в одной форме. Идея в том, что моя программа начинается с одной формы, и есть несколько кнопок, которые будут отображать другие формы. То есть, если пользователь нажимает кнопку для вызова другой формы, эта основная форма должна быть свернута, и всякий раз, когда пользователь закрывает другую форму, эта форма возвращается в нормальное или развернутое состояние.

Код выглядит так для моей основной формы, которая контролирует другие формы (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 как что-то публичное? или я тоже должен инициализировать Form1.cs в Form2.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 была закрытой, а не скрытой

UPDATE

Используя решение 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;
            }; 
        }
    }

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Если я правильно понимаю, вы можете подключиться к событию закрытия формы.

Таким образом, в вашей основной форме вы можете сделать что-то вроде:

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


    void form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Show();
    }
1 голос
/ 07 апреля 2011

Не имейте форму, чтобы слушать свои собственные события.Код должен идти в Form1.Как это:

        Form2 F2 = new Form2();
        F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; };
        F2.Show();
        this.WindowState = FormWindowState.Minimized;
0 голосов
/ 07 апреля 2011

Вам необходимо передать ссылку на основную форму дочерним формам и использовать метод show главной формы, чтобы снова сделать ее видимой при закрытии дочерней формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...