Як зв'язати дві форми stack overflow російською
Далі ще один приклад, який стосується взаємодії дочірньої форми і батьківської. Form1.cs:
В результаті повинен з'явитися мессаджбокс з повідомленням "Parent Function Called". Якщо потрібно звернутися до елементу форми, не забуваємо вказувати видимість, так як за замовчуванням вона Private, тобто елемент не доступний ззовні. У конструкторі у властивості елемента встановлюємо Modifiers -> Public.
відповідь дан 11 дек '11 о 16:27
Дякуємо. А як закрити першу форму, при натисканні на кнопку? Я роблю this.Close і закривається вся програма. - Святослав 11 дек '11 о 16:39
@ Святослав Правильно, адже Form1 це батьківська форма. Якщо потрібно прибрати з екрану, то використовуйте Hide (). - LinuxFan 11 дек '11 о 16:48
І останнє запитання. Чому коли я закриваю другу форму, налагодження не зупиняється? - Святослав 11 дек '11 о 16:59
Тому що Перша форма відкрита. Якщо ти зробив команду this.Hile (); То вона просто захована (згорнута), щоб її закрити використовуй this.Close (); Або я щось неправильно зрозумів в питанні? - Angus123 11 дек '11 о 17:02
Перша форма прихована, її просто не видно, тому що ми її приховали, але програма залишиться активним. Є 2 шляхи: 1. У події OnClosing другий форми викликати Show () для першої форми. 2. У події OnClosing другий форми викликати Application.Exit (), тоді налагодження зупиниться, але це буде не логічно, так як зазвичай вихід з програми роблять з батьківської форми. - LinuxFan 11 дек '11 о 17:08
Насправді досить просто. Примірник форми - це екземпляр класу, тому якщо потрібен доступ зовні до чогось всередині форми, просто зробіть відповідне public властивість (або поле, або метод - як вам більше подобається).
ну і найголовніше, що б екземпляри форм були в області видимості один у одного.
ну а як звертатися, я думаю, зрозуміло і без пояснень, правда?
Для створення дочірньої форми, що належить головній формі, необхідно призначити властивості Owner дочірнього вікна посилання на головну форму, яка буде власником дочірнього вікна.
Коли форма належить іншій формі, вона закривається або ховається з формою власницею. Наприклад, розглянемо форму Form2, яка належить формі Form1. Якщо Form1 закривається або згортається, Form2 також закривається або згортається. Дочірні форми також ніколи не відображаються ззаду форми-власника.
* Операції виконуються всередині тіла класу батьківської форми до котрої приєднується дочірня. Похідний клас userForm успадкований від класу Form, повинен бути попередньо оголошений (тут це опущено).
Тепер, залежно від потреб ви можете
- Довірити процес видалення дочірнього вікна збирачеві сміття. В даному випадку воно буде видалено після закриття головного вікна (якщо програмістом не передбачено іншого)
Виконати контрольоване видалення дочірнього вікна, після настання необхідного вам події, для цього в тілі необхідного вам методу, який займається обробкою наступ будь-якого потрібного вам події, потрібно вказати:
Тепер, вам немає необхідності переживати про те, що в оперативній пам'яті накопичуються не руйнування вашою програмою вікна програми, а також про можливі в зв'язку з цим непередбачених винятки.
Дякую за статтю! У Делфі і правда все було досить просто, а тут довелося трохи повозитися і покопатися. І ось, нарешті - запрацювало! Взагалі, є, звичайно, і інші способи, але цей мені здається найбільш простим і зручним. Про передачу параметрів через події і делегати я взагалі мовчу - це не для новачків. Так що даний варіант відмінно підходить для тих, кому потрібно просто, швидко і зрозуміло.