@programmer_developer
Начинающий программист C#

Работа с большим изобилием форм?

Доброго времени суток! Появилась такая потребность: В проекте есть множество форм, в пример я приведу 3 формы. Есть главная форма (1), на этой форме 2-е кнопки, 1-ая кнопка открывает 2-ую форму, а 2-ая кнопка 3-ью форму. Так вот мне нужно сделать так: При открытии 2-ой или 3-ей формы, 1-ая должна скрыться( Hide() ), а при закрытии 2-ой или 3-ей формы, 1-ая должна показаться( Show() ). Решил делать это с помощью доп. класса:

Доп. класс: (немного изменен)
/// <summary>
    /// Вспомогательный класс, для упрощенной работы с формами
    /// </summary>
    static class HelperForm
    {
        static AdminForm admin;
        static AuthorizationF auth;
        static TitleForm title;

        /// <summary>
        /// AdminF
        /// </summary>
        /// <param name="code">1 - new Form(); 2 - Close(); 3 - Show(); 4 - Hide()</param>
        static public void AdminF(int code)
        {
            switch (code)
            {
                case 1:
                    if (admin == null || admin.IsDisposed)
                        admin = new AdminForm();
                    break;
                case 2:
                    if (admin.IsDisposed == false)
                        admin.Close();
                    break;
                case 3:
                    if (admin.IsDisposed == false)
                        admin.Show();
                    break;
                case 4:
                    if (admin.IsDisposed == false)
                        admin.Hide();
                    break;
            }
        }

        /// <summary>
        /// AuthorizationF
        /// </summary>
        /// <param name="code">1 - new Form(); 2 - Close(); 3 - Show(); 4 - Hide()</param>
        static public void AuthorizationF(int code)
        {
            switch (code)
            {
                case 1:
                    if (auth == null || auth.IsDisposed)
                        auth = new AuthorizationF();
                    break;
                case 2:
                    if (auth.IsDisposed == false)
                        auth.Close();
                    break;
                case 3:
                    if (auth.IsDisposed == false)
                        auth.Show();
                    break;
                case 4:
                    if (auth.IsDisposed == false)
                        auth.Hide();
                    break;
            }
        }

Использовать класс буду так:

1) При старте программы, в главной форме происходит следующее:
public TitleForm()
        {
            InitializeComponent();
            HelperForm.AdminF(1); // инициализируем 2-ую форму
            HelperForm.AdminF(3); // показываем 2-ую форму
        }

2) На 2-ой форме есть кнопка, при нажатии на эту кнопку, происходит следующее:
private void Button_Click()
{
            HelperForm.AuthorizationF(1); // инициализируем форму 3
            HelperForm.AuthorizationF(3); // показываем форму 3
            Hide(); // скрываем форму 2
}

3) При закрытии 3-ей формы, происходит следующее:
private void AuthorizationF_Close()
{
             HelperForm.AdminF(3); // показываем 2-ую форму 
}



Этим способом я добиваюсь нужного мне результата, но знаю что есть лучше вариант, только не пойму как реализовать это проще.

Как думаете на правильном ли я пути, или это можно сделать в разы проще?

P.S. Всем спасибо!
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
@programmer_developer Автор вопроса
Начинающий программист C#
Оказалось не реально просто! =)
private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
 
            using (var dialog = new Form2())
            {
                dialog.ShowDialog();
            }
 
            this.Show();
        }


Всем спасибо за участие!!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@cicatrix
было бы большой ошибкой думать
Смотря сколько всего форм.
Можно и не заморачиваться сильно. Достаточно Ссылку на первую (1), как я понял (Activation) хранить где-нибудь глобально, чтобы все формы видели (например, в классе Program.MainForm);
В событии Activated просто делать Program.Form1.Hide(); а в событиях Closing или Closed делать Program.Form1.Show()

Ну и да, если форм много, то тогда проще расширить класс Form -
public abstract class MyForm : Form
{
    protected override void OnActivated(EventArgs e)
    {
        base.OnActivated(e);
        // TODO: Убедиться, что MainForm != null
        // System.Diagnostics.Debug.Assert(null != Program.MainForm);
        Program.MainForm.Hide(); 
    } // OnActivate

    protected override void OnDeactivate(EventArgs e)
    {
        base.OnDeactivate(e);
        // TODO: Убедиться, что MainForm != null
        // System.Diagnostics.Debug.Assert(null != Program.MainForm);
        Program.MainForm.Show(); 
    } // OnDeactivate
} // class MyForm


В общем, потом достаточно прописать в своей форме наследование не от Form, а от MyForm и всё. Любая форма будет вести себя так.
Если "MainForm" может изменяться от раза к разу, то её в конструктор новой формы надо будет передавать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы