Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Сослаться на MdiParent


Автор: ДобренькийПапаша 25.11.2009, 17:41
Пользователь кликает по пункту меню в MdiContainer (MainForm), и запускает модальное окно, в нём что-то делает и тыкает ОК, теперь надо запустить немодальное окно, и присвоить ему MdiParent=MainForm. Как это сделать?

Код

private void bAccept_Click(object sender, EventArgs e)
        {
            if(CheckOnValid())
            {
                
                StudentPaymentStatistics sps=
                    new StudentPaymentStatistics(int.Parse(tbCourse.Text), int.Parse(tbSemester.Text));
                sps.Show();                      //надо сcылку sps.MdiParent=MainForm
                this.DialogResult = DialogResult.OK;
            }
            else
            {
                MessageBox.Show("Некорректные данные", "Проверка", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Автор: Экскалупатор 25.11.2009, 22:37
как то не понятно, зачем в немодальном окне MdiParent=MainForm? просто что бы была ссылка на MainForm? так передай ее через конструктор например.

Автор: ДобренькийПапаша 26.11.2009, 20:32
Из модального я открываю немодальное, в котором нужно указать MdiParent, ибо открывается оно в его рамках, максимизируется хотя бы...
Как передать? Я не задавал бы вопроса, если бы знал как получить ссылку на нужную форму (MainForm, из которой открываю модальное окно, которое в свою очередь открывает немодальное и в рамках MainForm).

Автор: Экскалупатор 26.11.2009, 22:47
Цитата

MainForm, из которой открываю модальное окно, которое в свою очередь открывает немодальное и в рамках MainForm


 smile 

что значит немодальное в рамках MainForm? я не понимаю как это должно выглядеть. объясни для чего в немодальном окне указывать на MdiParent?
если просто ссылку то укажи в конструкторе класса фотмы(которая не модальная) что нужно передать в него ссылку на объект MainForm. и при создании этого не модального окна передавай в него ссылку.

Автор: diadiavova 27.11.2009, 04:15
Цитата(ДобренькийПапаша @  26.11.2009,  20:32 Найти цитируемый пост)
Из модального я открываю немодальное, в котором нужно указать MdiParent

Я что-то даже не могу представить себе ситуацию, в которой может понадобиться такая логика. Честно говоря я даже сомневаюсь в том, что такое возможно(хоть сам и не пробовал такое делать smile ). 
Модальный диалог запускается для того, чтобы запросить у пользователя некоторую информацию. Далее по результатам запроса все необходимые действия обычно выполняются уже в самой главной форме. А открывать дочернее окно из модального диалога - ИМХО, бред.

Автор: ДобренькийПапаша 27.11.2009, 18:22
Из главного окна, по пункту меню выбирается пункт "Оплатившие студенты", появляется модальное окно, где запрашивается курс, семестр, сума оплаты, после этого надо (не знаю как можно по другому) создать окно, в котором вывести в ListView всех студентов, соответствующих запросу.
Вот так. Честно говоря, точно также сделано в другой программе, в данном случае я просто хотел скопировать то же, что сделано в другой аналогичной программе.

Автор: Экскалупатор 27.11.2009, 18:49
ДобренькийПапаша, почему все таки не модальное окно нужно не понятно. вопрос в другом, что потом делать со списком стундентов? почему не отобразить список студентов в первом окне? т.е. по пункту меню всплывает окно(кстати зачем оно модальное тоже не понятно, можно просто сделать ShowDialog()), когда пользователь выбрал все что хотел и нажал "ок" окно закрылось и появился список(результат) в основном окне. или если нужно проверить результат выбора сразу, до нажатия на "ок"(ну мало ли, пользователь не уверен какие именно студенты ему нужны) то можно результат вывести в том же окне. короче пока что не вижу необходимости в каком то лишнем окне. если не прав то объясни более подробно. ну и конечно надо решить что делать со списком студентов. если нужно получать к нему(списку) доступ из основного окна, то лучше просто отобразить его там(сделать область для вывода результатов).

Цитата

создать окно, в котором вывести в ListView всех студентов, соответствующих запросу.


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

Автор: ДобренькийПапаша 27.11.2009, 19:22
ну нельзя мне в основном окне это отображать, там всё забито.
Может мне вместо ShowDialog(), воспользоваться Show(), при его открытии написать NotModal.MdiParent=this; (ссылка на основное)
А теперь при вызове нового окна с выбранными студентами написать:
sps.MdiParent=this.MdiParent;
sps.Show();

Видимо это самое простое...
Чё мучился, непонятно.

Или я не прав?

Автор: diadiavova 27.11.2009, 19:38
ДобренькийПапаша, ну а как это делается со стандартными окнами? Запускаешь окно, дальше если пользователь ввёл данные нажал ок, считывается информация из этого окна и на её основе выпоняются действия. По сути дела, в твоём случае окно запускается только для того, чтобы узнать курс, семестр и сумму оплаты.
Приаттачил пример

Автор: Экскалупатор 27.11.2009, 19:43
Цитата

там всё забито.


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

а вообще если уж негде отобразить, то(как я уже писал) запускай свою форму для выбора группы(и чего там у тебя еще надо) студентов, потом когда пользователь выбрал, возвращай результат в MainForm, а потом уже из  MainForm создавай второе окно(хочешь модальное, хочешь обычное) и в нем отображай список. второе окно получится как бы плавающей подсказкой к MainForm

Автор: ДобренькийПапаша 27.11.2009, 20:40
Да что-то я по правде перемудрил. Ведь любые данные из модального можно вернуть в главное, а оттуда вызвать новое окно приспокойно и передать туда данные. Что и сделал в примере diadiavova.

Да, бывает, реально перемудрил чего-то))) 
Спасибо всем. Спасибо  diadiavova и спасибо Экскалупатор.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)