Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Передать данные в родительскую форму.   Найти похожие ветки 

 
worldmen ©   (2005-12-01 10:45) [0]

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


 
Digitman ©   (2005-12-01 12:13) [1]


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


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

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

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


 
worldmen ©   (2005-12-01 16:25) [2]

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


 
Digitman ©   (2005-12-01 16:30) [3]


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


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

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


 
worldmen ©   (2005-12-01 18:05) [4]

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

 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). ...
дальше я еще не нашел как.


 
ЮЮ ©   (2005-12-02 05:57) [5]

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


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

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


 
worldmen ©   (2005-12-05 10:41) [7]

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


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

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

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

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


 
worldmen ©   (2005-12-07 09:53) [8]

А что это:

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

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


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


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

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


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


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

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

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


 
worldmen ©   (2005-12-19 19:57) [11]

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



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-1134463904
Иван Шихалев
2005-12-13 11:51
2006.01.08
Смайлы для Миранды


2-1135102199
Aleks
2005-12-20 21:09
2006.01.08
как узнать имя папки пользователя в (моих документах)


4-1130921832
Still Swamp
2005-11-02 11:57
2006.01.08
Как соорудить окошко типа PopUp


14-1134631855
vecna
2005-12-15 10:30
2006.01.08
Путин хочет запретить иностранные банки в России


4-1130766908
Зм1й
2005-10-31 16:55
2006.01.08
Сообщение деактивации