#1 02.04.08 10:45
[vb.NET] Вопрос по взаимодействие между формами Win приложения
Всем привет!
У меня следующая проблема:
Пишу программу с MDI интерфесом
MainForm - родительская MDI форма приложения.
Из неё вызывается дочерняя форма(Form1) с табличными данными загружаемые из базы.
Из формы Form1 я вызываю ещё одну форму(Form2) для редактирования этих самых данных.
И тут появляется проблема, дело в том что в требовании к интерфейсу form2 должна открываться не модально, а так же как и form1 открыватся в MDI контейнере родителя MainForm, поэтому после изменения данных в базе с помощью формы Form2, форма Form1 продолжает отображать устаревшие данные.
Теперь сам вопрос существует ли способ запустить на выполнение из Form2 процедуру обновления данных в форме Form1 если форма form2 открыта не модально.
тоесть скажем в Form1 у меня существует процедура Datereload() как запустить на выполнение эту процедуру скажем после нажатия кнопки Button на form2.
Заранее спасибо за ответ!
Offline
#3 07.04.08 22:29
Re: [vb.NET] Вопрос по взаимодействие между формами Win приложения
Нужно реализовать специальный класс- контроллер. И вообще, смотреть нужно в сторону архитектуры ModelViewController или Model View Presenter. Есть опенсорсные реализации этой архитектуры в виде каркасных базовых классов.
Offline
#5 10.04.08 10:00
Re: [vb.NET] Вопрос по взаимодействие между формами Win приложения
На самом деле все гараздо проще, необходимо процедуру datereload() принадлежащую классу формы(Form1) объявить как публичную. и после этого достаточно в форме Form2 в обработчике события нажатии Button1 вызывать эту процедуру Form1.datereload()
Но теперь как у не просвященного возникает другой вопрос как сделать такой механизм универсальным, ведь хотелось бы что бы Form2 можно было вызывать не только из формы (Form1), а скажем из формы Form3 с той же логикой. Но указанная выше конструкция статична и не позволяет этого реализовать так как form2 не имеет информации от куда она была вызвана если это не жестко не задать в коде как написано выше, а значит и нет возможности вызвать процедуру datereload()
Offline

