При роботі з декількома формами треба враховувати, що одна з них є головною - яка запускається першої в файлі Program.cs. Якщо у нас одночасно відкрита купа форм, то при закритті головної закривається все додаток і разом з ним всі інші форми.
Створити меню, що складається з пунктів Input, Calc і Exit.
При виборі команди Input відкривається діалогове вікно, що містить:
При виборі команди Calc відкривається вікно з результатами.
При виборі Exit додаток завершується.
В проекті буде використовуватися три вікна:
Для обміну даними між формами створимо статичний клас, який буде містити два поля: площа кола і довжину окружності, а також властивості для доступу до цих полів. Назвемо цей клас просто Class1.
При натисканні кнопки ОК в діалоговому вікні Form2, поля s, l отримають значення.
При виборі пункту меню Calc в третє вікно Form3 будуть виводиться значення цих полів.
Щоб додати ще однієї форми в проект потрібно виконати команду:
Вказуємо ім'я форми або залишаємо запропоноване
Для модального (діалогового) вікна необхідно встановити такі властивості:
Значення S і L поміщаються в поля статичного класу Class1
Присвоїти пробіл всім мітках.
Значення S і L вибираються з полів статичної класу Class1 і поміщаються на форму Form3
Ускладнимо наш приклад. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.
При виборі команди Input відкривається діалогове вікно, що містить:
При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.
Пишемо код першої (головної) форми.
Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:
Пишемо код другий форми.
Пишемо код третьої форми.
Розглянемо ще одне рещеніе цього завдання, а саме, передамо форму2 в форму3 як параметр. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.
При виборі команди Input відкривається діалогове вікно, що містить:
При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.
Пишемо код першої (головної) форми.
Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:
Пишемо код другий форми.
Пишемо код третьої форми.
Розглянемо ще одне рещеніе цього завдання, а саме, передамо форму2 в форму3 як параметр. Створити меню, що складається з пунктів Input, Calc і Exit.Пункт Calc -неактівен.
При виборі команди Input відкривається діалогове вікно, що містить:
При виборі Exit на головній формі додаток завершується. При виборі команди Calc відкривається вікно з результатами.
Пишемо код першої (головної) форми.
Пишемо код другий форми.
Пишемо код третьої форми.
Тут використовується метод Control.ControlCollection.Find (String,? Boolean), який виконує пошук елементів управління по їх властивості Name і створює масив з усіх елементів управління, які відповідають вказаним значенням цього свойства.Параметри:
В дизайнера створюємо головну форму (вона буде запускатися під час запуску програми). Помістимо один TextBox і Button.
При натисканні на кнопці буде відкриватися друга форма і текст з текстового поля головної форми передасться в текстове поле другої форми.
Аналогічно першої, вона має ті ж контроли. Більше нам і не треба. Точка входу в додаток запускає головну форму:
Код головної форми виглядає так:
Відповідно, не забудьте підключити кнопку на подія Click. Тут, в класі головної форми, є поле SecondForm secondForm, що представляє об'єкт-другу форму. При натисканні на кнопку «Передати», створюється друга форма (викликається перевантажений конструктор, його ми ще створимо) і запускається методом ShowDialog (). В даному випадку нам підходить саме цей метод. При чому, після цього ми обов'язково перевіряємо, чи не закрили чи другу форму, а виконали клік по її кнопці. Якщо, на другий формі був виконаний клік по кнопці, значить перша форма повинна прийняти дані від другої. Це відбувається шляхом виклику методу ReturnData () у другій форми.
Тепер найцікавіше - код другий форми:
Як бачимо, є єдина перевантаження конструктора, який приймає тип string. Пам'ятаємо, що ми намагаємося передавати текст з TextBox. У конструкторі відбувається планова ініціалізація компонент і установка тексту текстового поля в передане значення від першої форми. Далі, підписавшись на подія Click для кнопки другий форми, ми створили обробник btn_secondForm_Click, який і імітує роботу кнопки «Ok» будь-якого діалогового вікна. Таким чином, натискаючи на кнопку «Відправити» (другий форми), ми наводимо у виконання умова
(secondForm.DialogResult == DialogResult.OK) першої форми, через що, викликаючи метод secondForm.ReturnData (), ми встановлюємо тектових поле першої форми в значення текстового поля другий форми.
Робота даного методу, я думаю, вже не вимагає пояснень. Він просто повертає текст з єдиного текстового поля, при цьому, залишаючи його приватним.
В результаті, ми передали дані в другу форму з першої і з другої в першу не порушуючи принципи інкапсуляції.
Спробуйте внести текст «ааа» в текстове поле першої форми і виконати натискання на кнопці. Ви побачите в відкрилася другій формі цей текст в її текстовому полі. Спробуйте змінити текст на «ааа ппп» і натиснути на кнопку. Ви побачите як після закриття другої форми даний текст відобразиться в текстовому полі головної форми.