#1 30.10.09 15:11
[vb.net] Как передать данные из одной формы в другую динамически
Приветствую всех! Пишу приложение на vb.net в Visual Studio 2005
Задача состоит в следующем, есть форма-справочник со списком сотрудников, это форма может вызыватся из других форм (фора-родитель) где существует необходимость заполнения реквизита сотрудники. И тут возникает вопрос как передать данные из формы-справочник именно в ту форму из которой она была вызвана. Сейчас делаю очень криво при вызове формы-справочника передаю в неё имя(nameForm ) той формы с которой этот вызов произошел и далее работает условие.
Код: vb.net:
If nameForm = "add_project" Then add_project.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) ElseIf nameForm = "Add_poruch" Then Add_poruch.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) ElseIf nameForm = "ARM_Secretar" Then ARM_Secretar.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) End If
Тупняк заключается в том что мне приходится заранее предусматривать весь перечень форм которые могут вызывать форму-справочник. Хотелось бы сделать более универсальный способ когда мог бы адресовать данные обратно в форму-родитель без приминения условий.
PS. getdate - это публичная процедура размещенная в каждой форме в которой может понадобиться заполнения данными из формы-справочника, собственно внеё и передаются данные из формы-справочника.
И ещё нюанс все формы у меня открываются в MDI контейнере, форма-справочник открывается не модально так же внутри MDI.
Исправлено eagle (02.11.09 11:25)
Offline
#2 31.10.09 01:07
Re: [vb.net] Как передать данные из одной формы в другую динамически
1. вынеси необходимый набор функций форм-родителей в интерфейс и реализуй его в каждом из родителей
2. в форму справочник передавай объект формы-родителя в виде интерфейса
3. parent.getdata(...) для всех возможных родителей - вызов метода интерфейса
технически еще можно через наследование, но логически это будет неверно
Offline
#3 31.10.09 02:37
Re: [vb.net] Как передать данные из одной формы в другую динамически
может карту замутить если названия форм уникальные? не в курсе, есть ли вообще аналог map в basic'e ? xD
что-то наподобии (синтаксис вольный):
Код::
object FormsMap = new Map();
FormsMap.put("Add_poruch", Add_poruch);
...
...
object formObject = FormsMap.getDataByKey("Add_poruch");
formObject.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value);Offline
#6 02.11.09 22:17
Re: [vb.net] Как передать данные из одной формы в другую динамически
только на шарпе, не люблю синтаксис вб
Код: csharp:
public interface IParentForm { void getdata(object, object); } public class add_project:IParentForm { ... void IParentForm.getdata(object o1, object o2) { //do some actions here } ... } public class Add_poruch:IParentForm { ... void IParentForm.getdata(object o1, object o2) { //do some actions here } ... } public class ChildForm { private IParent m_parent; public ChildForm(IParent myparent) { m_parent = myparent; } ... { m_parent.getdata(this.DataGridView1.SelectedCells.Item[2].Value, this.DataGridView1.SelectedCells.Item[1].Value /* If nameForm = "add_project" Then add_project.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) ElseIf nameForm = "Add_poruch" Then Add_poruch.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) ElseIf nameForm = "ARM_Secretar" Then ARM_Secretar.getdata(Me.DataGridView1.SelectedCells.Item(2).Value, Me.DataGridView1.SelectedCells.Item(1).Value) End If */ } ... }
Исправлено Muxa (02.11.09 22:18)
Offline

