Форум: "Основная";
Текущий архив: 2004.01.26;
Скачать: [xml.tar.bz2];
ВнизКак вытянуть некоторые значения с формы, которая вызвала данную? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c