Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-83098
cRAker
2003-12-29 14:08
2004.01.26
Кодировки в Delphi foxpro


14-83259
cybervector
2004-01-05 13:26
2004.01.26
Кто уже видел D8? Какие впечатления?


1-83200
Zamik
2004-01-14 10:08
2004.01.26
Преобразование в DOS


1-83196
Andersen
2004-01-14 16:17
2004.01.26
Как сделать так, чтобы второе окно не появлялось


1-83195
xyz
2004-01-14 16:47
2004.01.26
Build with run time packages





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский