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

Вниз

Как вытянуть некоторые значения с формы, которая вызвала данную?   Найти похожие ветки 

 
MakNik ©   (2004-01-15 09:14) [0]

Такой вопрос: есть форма, которая может вызываться из других форм. Подскажите, плз., как с этой формы вытянуть заголовок и некоторые значения (например значение GroupBox1.Caption) с той формы, которая ее вызывает?


 
ЮЮ ©   (2004-01-15 09:20) [1]

Делай наоборот и это будет правильно:
В твоей форме вовсе не надо знать GroupBox1.Caption другой формы (а вдруг эта информация находится в GroupBox2?), тебе, по существу, нужна какая-то строка. Объяви в форме public property SomeStringProperty: string и перед вызовом вормы заполняй его в том месте любой другой формы, откуда ты её хочешь показать, а внутри пользуйся заполненным значением этого свойства


 
Anatoly Podgoretsky ©   (2004-01-15 09:41) [2]

:=


 
TUser ©   (2004-01-15 10:20) [3]

implementation
uses unit1; // unit1 содержит форму, которая вызвала данную
...
s:=form1.groupbox1.caption;


 
alex_*** ©   (2004-01-15 10:27) [4]

А если формы не AutoCreate и при создании TForm1 не использовалась глоб. переменная Form1? Вручную надо передавать


 
Плохиш_   (2004-01-15 10:30) [5]

>TUser © (15.01.04 10:20) [3]
Сам тоже так пишешь?
К тому же в оригинале речь идёт о многих формах.

А на вопрос ЮЮ уже ответил


 
MakNik ©   (2004-01-15 10:52) [6]

Это все правильно... но от этой формы (которую нужно вызывать с других форм), унаследованы рабочие формы... и хотелось бы там уже не задумываться об этих деталях, а просто вызывать форму, а все присвоения реализовать на родителе... так появляется возможность единообразно вносить изменения во все формы...


 
Sandman25 ©   (2004-01-15 11:14) [7]

Вместо обращения к компонентам формы рекомендую сделать метод GetMyValue: string. Тогда если потом захотите заменить ComboBox на какой-нибудь ListBox, не придется изменять код в 15 местах. Инкапсуляция, понимаешь :)


 
MakNik ©   (2004-01-15 11:55) [8]


> Sandman25 © (15.01.04 11:14) [7]

... я это и хочу сделать... но GetMyValue нужно сделать на родителе формы, котораю я вызываю... а как с неё узнать значение GroupBox1.Caption (или любое другое) на форме, с которой она была вызвана???


 
Sandman25 ©   (2004-01-15 12:07) [9]

[8] MakNik © (15.01.04 11:55)

procedure TForm1.Button1Click(Sender: TObject)
begin
if Form2.ShowModal = mrOK then
ShowMessage(Form2.GetMyValue);
end;
....
function TForm2.GetMyValue: string;
begin
Result := CombobBox.Text;
end;


 
MakNik ©   (2004-01-15 12:36) [10]


> Sandman25 © (15.01.04 12:07) [9]

Это понятно, но нужно все наоборот!!!
...типа этого:

function TForm2.GetMyValue: string;
begin
Result := Form1.CombobBox.Text;
end;

... только не Form1, а чтото другое... (т.к. я не знаю заранее с какой формы он будет вызван)


 
Sandman25 ©   (2004-01-15 12:43) [11]

Если нужно все наоборот, то нужно заводить параметр метода, а не обращаться неизвестно куда. Тогда из Form1 можно будет вызвать Form2.MyMethod(Combobox1.Text), то есть ComboBox1 лежит на Form1.


 
Reindeer Moss Eater ©   (2004-01-15 12:43) [12]

В модуле вызываемой формы пишется функция (не внутри класса формы)

type
PMyRecord = ^TMyRecord;
TMyRecord = record
...
end;

function ShowMyForm(ARec : PMyRecord):boolean;
begin
with TMyForm.Create(Application) do
try
//Здесь доступны все контролы вызванной формы и все параметры, нужные ей
Result:=(ShowModal = mrOk);
finally
Free;
end;
end;

Теперь из любого места приложения можно показать форму, заполнив MyRec и передав указатель на нее функции ShowMyForm


 
Sandman25 ©   (2004-01-15 12:45) [13]

[12] Reindeer Moss Eater © (15.01.04 12:43)

Кстати, а почему бы просто не описать параметр как var Rec:TMyRecord? Все равно ведь всегда будет создаваться запись в вызывающем блоке.


 
Reindeer Moss Eater ©   (2004-01-15 12:49) [14]

Это уже дело вкуса. Конечно можно.



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

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

Наверх




Память: 0.5 MB
Время: 0.01 c
1-83176
GooD-NTS
2004-01-14 23:48
2004.01.26
Атрибуты файлов


14-83280
DCoder
2003-12-26 16:53
2004.01.26
Кто на чем работает? (конфигурация ПК)


11-83127
BelchonokH
2003-05-08 23:42
2004.01.26
А как можно переделать компонент VCL


3-83112
Крутыш
2003-12-27 14:09
2004.01.26
Либо что-то с ADO или гридом из пакета DeveloperExpress4.


14-83244
DAC
2004-01-06 03:10
2004.01.26
Выскажите свое мнение!