Официальный сайт студ.городка НГТУ
Программирование и БД » [vb.net] Как передать данные из одной формы в другую динамически 

#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

#4  31.10.09 03:20

Re: [vb.net] Как передать данные из одной формы в другую динамически

там есть Dictionary. Почти тоже самое...

Offline

#5  02.11.09 11:13

Re: [vb.net] Как передать данные из одной формы в другую динамически

Muxa, спасибо за ответ, похоже это действительно то что нужно! Однако сам я не программист поэтому длинные и умные слова меня только растраивают. Прошу черкнуть Ваши мысли ввиде небольшого кода-примера. :)

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

Программирование и БД » [vb.net] Как передать данные из одной формы в другую динамически 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.057 сек.
Выполнено 14 запросов.