![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Ali002 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.4.2014 Репутация: нет Всего: нет |
Программисты! Тут такое дело есть родительское окно а есть дочернее, при нажатии на кнопку дочернего окна, которое отркылось в родительском окне, должно выходить другое дочернее окно в этом же родительском окне, так как это реализовать?
Вот код открытия дочернего окна в родительском пытаюсь сделать так же на третьей форме не получается так как это сделать?
|
|||
|
||||
micronic |
|
||||||||||||||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 30.12.2013 Репутация: нет Всего: нет |
Вся суть задачи заключается в том, чтобы присвоить свойству MdiParent дочернего окна указатель на родительское окно. Сделать это можно кучей способов...
1. Используя MdiParent дочернего окна #1, которое вызывает дочернее окно #2.
Я специально привел данный код в обработчике кнопки. Данный код можно использовать не везде. Ведь если посмотреть, как мы вызываем дочернюю форму в MainForm
то станет ясно, что в конструкторе дочерней формы мы не можем оперировать полем MdiParent, оно к этому моменту еще не задано. Зато потом можно пользоваться вовсю. 2. Передавая указатель на MainForm дочерней форме Мы всегда можем модифицировать конструктор дочерней формы таким образом
Тогда создание дочерней формы в MainForm будет таким
Теперь у нас есть указатель на MainForm даже в конструкторе дочерней формы. 3. Можно оставить возможность создавать дочерние формы исключительно в MainForm Мне кажется данный способ наиболее идеологически верным. Тем более что в MDI-приложениях часто при создании дочернего элемента MainForm должна произвести кучу дополнительных служебных действий (добавить вкладку на панель вкладок, изменить цвета где-нибудь и т.п.). Логика следующая... Дочерняя форма должна отправить родительской команду на создание нового элемента. А родительская уже будет делать всю грязную работу. Для этого удобно использовать события. Создаем событие в коде дочернего окна. В этот момент мы определяем, какие параметры будут передаваться нашему событию... Полезно передать указатель на дочернюю форму, потому что иначе MainForm не будет знать, какое именно дочернее окно запросило создание нового (а это скорее всего важная информация), плюс ко всему по этому указателю можно будет обратиться к любому элементу дочерней формы.
Теперь из MainForm мы можем прицепить к этому событию свой обработчик, который будет создавать новое окно тогда, когда будет вызываться данное событие
Обработчик makeNewForm помимо того что создает новое дочернее окно - сразу цепляет к нему себя же, чтобы новое созданное окно так же могло отправлять команду на создание себе подобных. Сама же подача сигнала из дочерней формы вызывается достаточно просто:
Постарался разжевать максимально. Дополнительно по третьему способу надо гуглить в сторону событий и делегатов. |
||||||||||||||
|
|||||||||||||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |