Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как ПРАВИЛЬНО кмногократно открывать форму


Автор: jang 18.10.2010, 10:19
Здравствуйте!

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

Код

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show(); //нужен именно Show(), а не ShowDialog()
        }


Является не правельным, т.к. каждый раз при нажатии содается новая форма, при этом вызывается контруктор ее и т.д.

Так делаю я в своем проекте

Код

        private Form2 f2;
        private bool ShowForm=false;

        private void button1_Click(object sender, EventArgs e)
        {
            if (ShowForm == true)
            {
                f2.Visible = true;
            }
            else
            {
                f2 = new Form2();
                f2.Show();
                ShowForm = true;
            }
        }


Закрываю дочернюю форму соответственно

Код

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
                // Запрещаем закрытие формы пользователем
            if (e.CloseReason == CloseReason.UserClosing)
            {
                e.Cancel = true;
                this.Visible = false;
            }
        }


Но мне куажется этот способ очень кривой.

Какие еще есть варианты? ))

Автор: Экскалупатор 18.10.2010, 10:36
а почему нельзя просто разделить эти строки?
Код

 private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show(); //нужен именно Show(), а не ShowDialog()
        }
       
сделать что то вроде:
Код

Form2 f2 = new Form2();

 private void button1_Click(object sender, EventArgs e)
        {
            f2.Show(); //нужен именно Show(), а не ShowDialog()
        }
   
т.е. объявить форму один раз, вызвать ее конструктор, а потом просто показывать по необходимости? она не будет создаваться каждый раз заново.

Автор: jang 18.10.2010, 10:45
5 сек

Добавлено через 5 минут и 14 секунд
эх, понедельник понедельник...
Спасибо, постараюсь больше не задавать идиотских вопросов )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)