![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возвращение результата формы (не ModalResult)
Slider007 © (2007-04-19 09:53:00)Вопрос:
Есть форма, на ней грид из которого выбирается строка из БД (например человек).
Задача формы - предоставить список, чтоб я из него выбрал нужную позицию, и передать головной форме информацию о выборе (в данном случае значение поля ID из таблицы) и закрыться.
Вот сама передача значения в головную форму и интересует.
Видятся 3 варианта:
1. Сделать, например, в главном (или в каком-нибудь другом) модуле глобальную переменную, в нее писать нужное значение, закрывать текущую форму и потом из нужной формы читать.
2. Сделать в форме пропертю, которую головная форма считывать будет.
3. Сделать в головной форме пропертю, в которую текущая форма значение писать будет.
Не могу определиться, как правильнее сделать ?
Может вообще более изящное решение существует ?
clickmaker (2007-04-19 10:54:00) [21]type TSelectForm
....
class function TSelectForm.Execute(var ID: Integer); boolean;
begin
with TSelectForm.Create(Application) do begin
try
if ShowModal = mrOk then begin
ID := из грида
result := true;
end else
Result := false;
finally
Free;
end;
end;
end;
вызов
if TSelectForm.Execute(ID) then
выбрали
Reindeer Moss Eater (2007-04-19 10:46:00) [22]А что тогда ТО ? :)
Я же скзал что то.
Функция, возвращающая результат.
Пользователь этй функции не должен ничего знать ни про класс формы осуществляющей выбор, ни тем более про поля этого класса.
В любом месте вызвал функцию - получил взад нужный результат.
Slider007 (2007-04-19 10:30:00) [23]Reindeer Moss Eater © (19.04.07 10:24) [4]
2. Сделать в форме пропертю, которую головная форма считывать будет.
Уже лучше, но все равно не то. Это лишнее.
А что тогда ТО ? :)
Ну например я в функции создаю (или показываю) форму, в которой мне нужный список выдается, делаю выбор. Дак как мне этот выбор самой функции, вызвавшей нужную форму со списком сообщить ?
На самом деле подобную задачу один раз всего решал и использовал пункт 2, но тут решил конкретно озадачиться, чтоб всё правильно было, но пока до конца догнать не могу, наверное познаний в делфи таки не хватает ..
Reindeer Moss Eater (2007-04-19 10:24:00) [24]1. Сделать, например, в главном (или в каком-нибудь другом) модуле глобальную переменную, в нее писать нужное значение, закрывать текущую форму и потом из нужной формы читать.
Корявое решение с точки зрения повторного использования кода. Форма выбора должна "знать" куда записывать результат вместо того, что бы просто вернуть его. Плюс к этому повышается взаимная зависимость модулей.
2. Сделать в форме пропертю, которую головная форма считывать будет.
Уже лучше, но все равно не то. Это лишнее.
3. Сделать в головной форме пропертю, в которую текущая форма значение писать будет.
То же самое что и п.1
Reindeer Moss Eater (2007-04-19 10:18:00) [25]Куда развернуть?
Тебе нужно значение? Значит нужна функция.
Вот и напиши функцию, которая сделает то что тебе надо и вернет то что тебе надо.
Slider007 (2007-04-19 10:17:00) [26]Ммм :)
А развернуть мысль ?
Reindeer Moss Eater (2007-04-19 10:13:00) [27]function MySelectFunction(.....) : integer;