Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передать данные в родительскую форму. [D5, D7, 95/98, 2000, XP]


worldmen ©   (2005-12-01 10:45:00) 

Как правильно передать в MDI из дочерней формы передать данные в родительскую форму.
 (Есть таблица для справок и ее могут использовать несколько форм.)


worldmen   (2005-12-19 19:57:00) [1]

Хорошо. Спасибо.
> Список можно еще продолжать и ... Мне больше нравится 3
> способ.


evvcom   (2005-12-07 10:55:00) [2]


> Я вызываю TForm2 из любой формы, выбираю нужные данные и
> по кнопке "ОК" передаю в родительскую.

Несколько способов:
1. Все "родительские" формы наследуются от TMySuperParentForm, в которой есть метод принятия данных. "Дочерняя" MDI-форма вызывает этот метод.
2. Все "дочерние" формы наследуются от TMySuperChildForm, в которой есть событие для передачи данных. После создания "дочки" назначается этот обработчик.
3. В созданную дочернюю форму передается Handle формы-родителя (через конструктор или свойство). Дочернее посылает сообщение родителю с ссылкой на данные.

Список можно еще продолжать и ... Мне больше нравится 3 способ.


Плохиш   (2005-12-07 10:54:00) [3]


> worldmen ©   (07.12.05 09:53) [8]

За неделю можно уже было несколько сотен вариантов придумать, но драйвер head.drv корявый.


worldmen   (2005-12-07 09:53:00) [4]

А что это:

> Anatoly Podgoretsky ©   (02.12.05 09:18) [6]
> Обычно делают наоборот, делают экспорт из родительской формы.
>

 Пример можно?


worldmen   (2005-12-05 10:41:00) [5]

> ЮЮ ©   (02.12.05 05:57) [5]
Насколько я понял ты приводишь пример для передачи данных из TForm1 в TForm2, а мне надо наоборот.
> f:= TForm2.Create(Self); // вызываем дочернюю форму
> f.PublicСвойство := то что нужно
>
> в TForm2.SetPublicСвойство - необходимый код.


Я вызываю TForm2 из любой формы, выбираю нужные данные и по кнопке "ОК" передаю в родительскую.

А вот этим я не понял как передавать данные:
> Для этих целей есть св-ва ActiveMDIChild, MDIChildCount,
>  MDIChildren

 С помощью этих процедур можно только увидеть кол-во MDIChild или закрыть их. Может я что-нибудь не нашел?

Что-то очень сложно, но я попробую.


Anatoly Podgoretsky   (2005-12-02 09:18:00) [6]

Обычно делают наоборот, делают экспорт из родительской формы.


ЮЮ   (2005-12-02 05:57:00) [7]

f:= TForm2.Create(Self); // вызываем дочернюю форму
f.PublicСвойство := то что нужно

в TForm2.SetPublicСвойство - необходимый код.

Если св-ва нежелательно менять, а следует передовать только при создании, то в модуле второй формы пишем процедуру, видимую из модуля основной формы (или метод класса)

function OpenForm(<список параметров для открытия>): TForm2;
begin
 Result := TForm2.Create( Application); // вызываем дочернюю форму
 //в этом модуле нам доступны любые поля f, устанавливаем нужные   значения в соответствии со списком параметров
 Result.Caption := ...  
...
end;

в гланой вызываем
 OpenForm(<список параметров для открытия>):

Или используем для этих целей public метод класса:

class function TForm2.OpenForm(<список параметров для открытия>): TForm2;
begin
 Result := TForm2.Create( Application); // вызываем дочернюю форму
 ...
end;

в гланой вызываем
 TForm2.OpenForm(<список параметров для открытия>):

>так как Self - это родительская форма, то в дочерней к нему можно >обратится как-то так:
>(Sender as Owner). ...

Для этих целей есть св-ва ActiveMDIChild, MDIChildCount, MDIChildren


worldmen   (2005-12-01 18:05:00) [8]

> вот и рассказывай, кто кому и чего там у тебя должен передать  ...
 У меня пока ни как не организовано.
 А организовать представляю так:

 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
    txt: string;
   { Public declarations }
 end;
...
procedure TForm1.Button1Click(Sender: TObject);
var f: TForm2;
begin
 txt:='';                  //
 f:= TForm2.Create(Self); // вызываем дочернюю форму
 // f.ShowModal; - это не проходит так как формы в MDI приложении
end;


так как Self- это родительская форма, то в дочерней к нему можно обратится как-то так:
(Sender as Owner). ...
дальше я еще не нашел как.


Digitman   (2005-12-01 16:30:00) [9]


> мне надо передать всего лишь одно число


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

с бубном вокруг тебя никто прыгать не станет, пытаясь угадать что же там ты не так делаешь ...


worldmen   (2005-12-01 16:25:00) [10]

Я имею ввиду передать данные не самой "РодительскаяМДИФорме".
Вызываю форму и из нее вызываю справку. А так как эту справку могут использовать другие формы, то я думаю простое присвоение значения какой-нибудь глобальной переменной - это неправильно. (Хотя мне надо передать всего лишь одно число).


Digitman   (2005-12-01 12:13:00) [11]


> Как правильно


сначала определи критерий "правильности".

иначе ответ на вопрос - прямо по курсу :

РодительскаяМДИФорма.ТаблицаДляСправок.ПередатьДанные(Такие_То)


Наверх

Титульная страница Поиск, карта сайта Написать письмо