Назад Уперед Зміст

Багатовіконний інтерфейс

При роботі з декількома формами треба враховувати, що одна з них є головною - яка запускається першої в файлі Program.cs. Якщо у нас одночасно відкрита купа форм, то при закритті головної закривається все додаток і разом з ним всі інші форми.

Приклад 1

Створити меню, що складається з пунктів Input, Calc і Exit.

При виборі команди Input відкривається діалогове вікно, що містить:

При виборі команди Calc відкривається вікно з результатами.

При виборі Exit додаток завершується.

В проекті буде використовуватися три вікна:

  1. Головне вікно, що містить меню;
  2. Діалогове (модальное) вікно, що містить поле введення і чекбокси; При натисканні на кнопку ОК виконуються обчислення, при натисканні на Cancel вікно закривається.
  3. Вікно, в яке буде виводитися результат (НЕ модальное).

Передача параметрів з вікна у вікно

Для обміну даними між формами створимо статичний клас, який буде містити два поля: площа кола і довжину окружності, а також властивості для доступу до цих полів. Назвемо цей клас просто Class1.

При натисканні кнопки ОК в діалоговому вікні Form2, поля s, l отримають значення.

При виборі пункту меню Calc в третє вікно Form3 будуть виводиться значення цих полів.

Добавленіe ще однієї форми

Щоб додати ще однієї форми в проект потрібно виконати команду:

Вказуємо ім'я форми або залишаємо запропоноване

Головна форма. Меню Input. Name

Головна форма. Меню Input. Click

Головна форма. Обробники

Діалогове вікно. Властивості форми

Для модального (діалогового) вікна необхідно встановити такі властивості:

Діалогове вікно. Обробник події Click кнопки ОК (button1)

Значення S і L поміщаються в поля статичного класу Class1

Вікно результатів. Конструктор

Присвоїти пробіл всім мітках.

Вікно результатів. Обробник події Load форми Form3

Значення S і L вибираються з полів статичної класу Class1 і поміщаються на форму Form3

Приклад 2

Ускладнимо наш приклад. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.

При виборі команди Input відкривається діалогове вікно, що містить:

При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.

Пишемо код першої (головної) форми.

Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:

Пишемо код другий форми.

Пишемо код третьої форми.

Приклад 3

Розглянемо ще одне рещеніе цього завдання, а саме, передамо форму2 в форму3 як параметр. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.

При виборі команди Input відкривається діалогове вікно, що містить:

При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.

Пишемо код першої (головної) форми.

Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:

Пишемо код другий форми.

Пишемо код третьої форми.

Приклад 3

Розглянемо ще одне рещеніе цього завдання, а саме, передамо форму2 в форму3 як параметр. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.

При виборі команди Input відкривається діалогове вікно, що містить:

При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.

Пишемо код першої (головної) форми.

Пишемо код другий форми.

Пишемо код третьої форми.

Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:

Приклад 4

В дизайнера створюємо головну форму (вона буде запускатися під час запуску програми). Помістимо один TextBox і Button.

При натисканні на кнопці буде відкриватися друга форма і текст з текстового поля головної форми передасться в текстове поле другої форми.

Аналогічно першої, вона має ті ж контроли. Більше нам і не треба. Точка входу в додаток запускає головну форму:

Код головної форми виглядає так:

Відповідно, не забудьте підключити кнопку на подія Click. Тут, в класі головної форми, є поле SecondForm secondForm, що представляє об'єкт-другу форму. При натисканні на кнопку «Передати», створюється друга форма (викликається перевантажений конструктор, його ми ще створимо) і запускається методом ShowDialog (). В даному випадку нам підходить саме цей метод. При чому, після цього ми обов'язково перевіряємо, чи не закрили чи другу форму, а виконали клік по її кнопці. Якщо, на другий формі був виконаний клік по кнопці, значить перша форма повинна прийняти дані від другої. Це відбувається шляхом виклику методу ReturnData () у другій форми.

Тепер найцікавіше - код другий форми:

Як бачимо, є єдина перевантаження конструктора, який приймає тип string. Пам'ятаємо, що ми намагаємося передавати текст з TextBox. У конструкторі відбувається планова ініціалізація компонент і установка тексту текстового поля в передане значення від першої форми. Далі, підписавшись на подія Click для кнопки другий форми, ми створили обробник btn_secondForm_Click, який і імітує роботу кнопки «Ok» будь-якого діалогового вікна. Таким чином, натискаючи на кнопку «Відправити» (другий форми), ми наводимо у виконання умова

(secondForm.DialogResult == DialogResult.OK) першої форми, через що, викликаючи метод secondForm.ReturnData (), ми встановлюємо тектових поле першої форми в значення текстового поля другий форми.

Робота даного методу, я думаю, вже не вимагає пояснень. Він просто повертає текст з єдиного текстового поля, при цьому, залишаючи його приватним.

В результаті, ми передали дані в другу форму з першої і з другої в першу не порушуючи принципи інкапсуляції.

Спробуйте внести текст «ааа» в текстове поле першої форми і виконати натискання на кнопці. Ви побачите в відкрилася другій формі цей текст в її текстовому полі. Спробуйте змінити текст на «ааа ппп» і натиснути на кнопку. Ви побачите як після закриття другої форми даний текст відобразиться в текстовому полі головної форми.

Назад Уперед Зміст