.
Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)
Автор megabax   
02.03.2012 г.
В этой статье я постараюсь максимально просто и понятно изложить основы программирования на языке Delphi

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Исходники к уроку можно скачать здесь.

 

Сегодня мы научимся управлять формами (окнами Windows).  И так, создаем новый проект. Для начала добавим в проект две новых формы. Для этого в обозревателе решений щелкнем правой кнопкой мыши на дереве проектов*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

В открывшемся меню выберем "Добавить" -> "Форма Windows..."*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Им автоматически будут присвоены имена form2 и form3. Если хотите, можете переименовать их*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Далее, в начало описания класса основной формы (Form1, если вы ее не переименовывали), добавьте описание поле, совпадающих с именами добавленных форм*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Добавьте к основной форме две кнопочки*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

У главной формы сделайте заголовок "Главное окно" (свойство text). Значение свойства MaximizeBox сделайте false - что бы заблокировать кнопочку разворота окна на весь экран. Свойство FormBorderStyle сделайте FixedSingle - это нужно для того, что бы нельзя было менять размер окна.

У следующей формы (form2) сделаем заголовок "Подчиненное окно", свойству StartPosition присвоим Manual, что бы мы могли явно задать начальное положение окна. Ниже мы сделаем это в программном коде, а сейчас зададим у второй формы свойство ShowTaskBar в false - это для того, что бы оно не отображалось в TaskBar-е*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

У формы 3 сделаем заголовок "Диалоговое окно", MaximizeBox = false, MinimizeBox = false, FormBorderStyle= FixedDialog, StartPosition=Center, ShowInTaskBar=false

Теперь займемся программированием. Начнем с конструктора главной формы, туда мы поместим код добавления подчиненных форм (если вы переименовали формы, то вместо form2 и form3 ставьте свои имена):

        public Form1()

        {

            InitializeComponent();

            AddOwnedForm(form2);

            AddOwnedForm(form3);

        }

Создадим следующие обработчики событий у формы 1 и кнопочек: у формы Shown, у кнопочек Click:

        private void Form1_Shown(object sender, EventArgs e)

        {

            form2.Location = new Point(Right - 10, Bottom - 10);

        }

 

        private void button1_Click(object sender, EventArgs e)

        {

            form2.Show();

        }

 

        private void button2_Click(object sender, EventArgs e)

        {

            form3.ShowDialog();

        }

Как я и обещал, в обработчике Shown главной формы мы явно задаем местоположение подчиненной формы. Задает смещением относительно левого нижнего угла начального положения главной формы*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Если в обработчике мы поменяем координаты:

        private void Form1_Shown(object sender, EventArgs e)

        {

            form2.Location = new Point(Right - 70, Bottom - 20);

        }

то и начальное положение подчиненной формы будет другим*:

Visual C# для чайников. Урок 11. Работа с формами (Form, EventArgs, CloseReason)

Следует заметить, что форма "Подчиненное окно" отображается у нас в обычном режиме, а "Диалоговое окно" в модальном, тоесть, пока оно не закрыто, мы не можем получить доступ к любой другой форме программы (даже к главной форме), пока не закроем его.

И еще немного по программируем form2, что бы устранить недочет: после закрытия формы 2 попытка ее повторного открытия приводит к глюку. Все дело в том, что закрыть окно, мы удаляем его из памяти. Устранит проблему следующий обработчик FormClosing формы 2:

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)

        {

            if (e.CloseReason == CloseReason.UserClosing)

            {

                e.Cancel = true;

                Hide();

            }

        }

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

Исходники к уроку можно скачать здесь.


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Microsoft Visual Studio 2010 Professional", авторское право на который принадлежит корпорации Microsoft.. 


 

 

(С) Шуравин Александр

 

Последнее обновление ( 12.02.2014 г. )