.
Visual C# для чайников. Урок 12. Работа с формами. Продолжение.
Автор megabax   
01.04.2012 г.
В этой статье я постараюсь максимально просто и понятно изложить основы программирования на языке Delphi

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

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

Сегодня мы будем модифицировать пример, который разработали на прошлом уроке. В частности, изменим обработчик события нажатия на кнопочку button1 ("Открыть подчиненное окно"):

        private void button1_Click(object sender, EventArgs e)

        {

            if (form2.Visible) form2.Close(); else form2.Show();

        }

Теперь первое нажатие на кнопочку открывает форму form2, а второе закрывает ее. 

Немножко дообработаем форму 2, в частности, положим на нее метку*:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

свойство AutoSize этой метки сделаем false, Dock = Fill, а TextAlign = MiddleCenter. И изменим исходный текст модуля формы 2, в частности, создадим у нее два обработчика событий FormClosing и VisibleCanged:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace WindowsFormsApplication1

{

    public partial class Form2 : Form

    {

        private int count;

 

        public Form2()

        {

            InitializeComponent();

        }

 

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)

        {

            if (e.CloseReason == CloseReason.UserClosing)

            {

                e.Cancel = true;

                if (MessageBox.Show("Закрыть подчиненное окно?", "Подтверждение",

                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

                {

                    Hide();

                    Owner.Activate();

                }

            }

        }

 

        private void Form2_VisibleChanged(object sender, EventArgs e)

        {

            Owner.Controls["button1"].Text=Visible ? "Закрыть подчиненные окно" : "Открыть подчиненное окно";

            if (Visible) label1.Text = "Окно открыто в " + (++count) + " раз";

        }

    }

}

теперь при попытке закрыть окно формы 2 будет выдан запрос:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

Окно закрывается только при нажатии кнопки "Да", при чем не важно, программно закрывается окно (при нажатии на кнопочку "Закрыть подчиненное окно") или пользователь закрывает его непосредственно. Кроме того, программа считает, сколько раз открыта форма 2:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

И меняет надпись на кнопке в главном окне:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

Подчиненное окно может влиять на главное при помощи свойства Owner. Для демонстрации использования этого свойства изменим форму 3:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

Кнопки "ОК" и "Отмена" у нас будут модальными кнопками, для этого свойство формы 3 AcceptButton должно указывать на на кнопочку "ОК", а CancelButton на "Отмена". У кнопки "Применим" сделаем следующий обработчик нажатия:

        internal void button2_Click(object sender, EventArgs e)

        {

            Owner.Text = textBox1.Text;

            Owner.OwnedForms[0].Text = textBox2.Text;

        }

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

Так же сделаем обработчик события VisibleChange у формы 3:

        private void Form3_VisibleChanged(object sender, EventArgs e)

        {

            if (Visible) ActiveControl = textBox1;

        }

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

И теперь переделываем обработчик button2_Click главной форме:

        private void button2_Click(object sender, EventArgs e)

        {

            if (form3.ShowDialog() == DialogResult.OK)

            {

                form3.button2_Click(this, EventArgs.Empty);

            }

        }

Теперь при нажатии кнопочки "ОК" или "Применить" будет меняться заголовок главной формы и формы 2, причем при нажатии на кнопку "ОК" форма 3 будет автоматически закрываться. Так же автоматически форма 3 закроется при нажатии "Отмена", но без обновления заголовков главной формы и форм 2:

Visual C# для чайников. Урок 12. Работа с формами. Продолжение.

 


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


 

 

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

 

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