how can I find form by name? On this form I have Edit (TEdit) and i would like to write something in this TEdit (its name e.g.: adress) but I have only form name.
Can you help me?
asked Sep 1, 2014 at 17:35
3
There is a simpler way of finding a form by name. Since all of auto-created form objects become owned by Application
object and TApplication
inherits from TComponent
, you can either iterate thru Application.Components
array property or use Application.FindComponent
method.
var
Form: TForm;
begin
Form := Application.FindComponent('LostForm1') as TForm;
if Assigned(Form) then
Form.Show
else
{ error, can't find it }
Note that FindComponent
is case-insensitive.
answered Sep 1, 2014 at 19:59
Free ConsultingFree Consulting
4,3001 gold badge29 silver badges50 bronze badges
2
This answer assumes you are making a VCL application. I don’t know if FireMonkey has a similar solution.
All forms are added to the global Screen (declared in Vcl.Forms) object when they are created. Thus you can make a little helper function like this
function FindFormByName(const AName: string): TForm;
var
i: Integer;
begin
for i := 0 to Screen.FormCount - 1 do
begin
Result := Screen.Forms[i];
if (Result.Name = AName) then
Exit;
end;
Result := nil;
end;
answered Sep 1, 2014 at 18:23
LarsdkLarsdk
7056 silver badges10 bronze badges
0
You can use the FindWindow function if you know the form title or the class name of the form.
answered Sep 1, 2014 at 17:40
Ross BushRoss Bush
14.6k2 gold badges31 silver badges54 bronze badges
1
Как найти форму в Делфи, созданную на этапе выполнения
|
От: |
Red_Baron |
|
Дата: | 16.09.05 13:47 | ||
Оценка: |
Доброго дня, уважаемые специалисты и новички!
У меня возникла следующая проблема:
я создаю на этапе выполнения форму(например
TForm2.Create (Application);
Caption:= 'Window1'
) и на ней есть, например, какой то Edit1. Затем я создаю еще такую же форму
TForm2.Create (Application);
Caption:= 'Window2'
А теперь вопрос, как мне с другой формы(например с Form1), добраться к Edit1 конкретной формы? Пускай это будет первая созданная формаформа с
Caption = 'Window1'
Заранее, большое спасибо всем откликнувшимся!
Re: Как найти форму в Делфи, созданную на этапе выполнения
|
От: |
Drago |
|
Дата: | 16.09.05 13:54 | ||
Оценка: |
Здравствуйте, Red_Baron, Вы писали:
Screen.Forms вам поможет
Re: Как найти форму в Делфи, созданную на этапе выполнения
|
От: |
Oleg A. Bachin |
|
Дата: | 16.09.05 13:55 | ||
Оценка: |
Здравствуйте, Red_Baron, Вы писали:
R_B>Доброго дня, уважаемые специалисты и новички!
R_B>У меня возникла следующая проблема:
R_B>я создаю на этапе выполнения форму(например
R_B>
R_B>TForm2.Create (Application);
R_B>Caption:= 'Window1'
R_B>
R_B>) и на ней есть, например, какой то Edit1. Затем я создаю еще такую же форму
R_B>
my_form_1 := TForm2.Create (Application);
R_B>Caption:= 'Window2'
R_B>
R_B>А теперь вопрос, как мне с другой формы(например с Form1), добраться к Edit1 конкретной формы? Пускай это будет первая созданная формаформа с
R_B>
my_form_1.Caption = 'Window1'
R_B>
R_B>Заранее, большое спасибо всем откликнувшимся!
или заводи список… никто ж не знает что тебе нужно…
… << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[2]: Как найти форму в Делфи, созданную на этапе выполнени
|
От: |
Red_Baron |
|
Дата: | 16.09.05 13:58 | ||
Оценка: |
Здравствуйте, Drago, Вы писали:
D>Здравствуйте, Red_Baron, Вы писали:
D>Screen.Forms вам поможет
и как работает этот Screen.Forms?
объясните пожалуйста?
Re[3]: Как найти форму в Делфи, созданную на этапе выполнени
|
От: |
Drago |
|
Дата: | 16.09.05 14:01 | ||
Оценка: |
Здравствуйте, Red_Baron, Вы писали:
R_B>и как работает этот Screen.Forms?
R_B>объясните пожалуйста?
при содании формы она автоматически заносится «в реестр» форм. доступ к этому массиву можно получить через свойство Forms объекта Screen.
дальше все зависит от того что вам нужно
Re[3]: Как найти форму в Делфи, созданную на этапе выполнени
|
От: |
svd71 |
http://visualdesigner.fatal.ru/ |
Дата: | 16.09.05 17:12 | ||
Оценка: |
Здравствуйте, Red_Baron, Вы писали:
R_B>Здравствуйте, Drago, Вы писали:
D>>Здравствуйте, Red_Baron, Вы писали:
D>>Screen.Forms вам поможет
R_B>и как работает этот Screen.Forms?
R_B>объясните пожалуйста?
Перечисление созданных форм определенного класса (вариант TForm2)…
...
for i := 0 to Screen.Forms.Count -1 do
if Screen.Forms[i] is TForm2 then
Caption := Screen.Forms[i].Name;
...
Re: Как найти форму в Делфи, созданную на этапе выполнения
|
От: | Аноним | |
Дата: | 19.09.05 11:02 | ||
Оценка: |
Тебе необходимо пройти по массиву Application.Forms и найти свою форму. А потом у найденой формы вызвать метод FindComponent и привести его к TEdit
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Ошибка, при нажатии на кнопку:
TfrmCommonQuery
AppException frmBS
Error reading frCSVExport1.atk: Property does not exist
frmCommonQuery — форма, frCSVExport1 — получается компонент…Форм, в проекте, очень много…
Руководитель пишет:
: точнее frmCommonQuery
: и на этой форме похоже чего то не хватает
: а всего скорее не на этой
: на другой
: я просто удалил и добавил снова этот компонент frCSVExport1
: похоже заработало
: сделай тоже самое
: пройди по всем формам
: по нажатию кнопок
: где вылетает ошибка
: ну и плюс есть ещё debug
: delphi это позволяет делать в отличии от других сред
«: по нажатию кнопок» — открою я все формы, а в смысле по нажатию кнопок…а с debud темный лес…
Недопонимаю, что нужно сделать
Как мне найти форму по имени? В этой форме у меня есть Edit (TEdit), и я хотел бы написать что-нибудь в этом TEdit (его имя, например: адрес), но у меня есть только имя формы. Вы можете помочь мне?
3 ответа
Лучший ответ
Есть более простой способ найти форму по имени. Поскольку все автоматически созданные объекты форм становятся собственностью Application
и TApplication
наследуется от TComponent
, вы можете выполнить итерацию через Application.Components
свойство массива или используйте Application.FindComponent
метод.
var
Form: TForm;
begin
Form := Application.FindComponent('LostForm1') as TForm;
if Assigned(Form) then
Form.Show
else
{ error, can't find it }
Обратите внимание, что FindComponent
нечувствителен к регистру.
9
Free Consulting
1 Сен 2014 в 23:59
Этот ответ предполагает, что вы создаете приложение VCL. Я не знаю, есть ли у FireMonkey подобное решение.
Все формы добавляются к глобальному объекту Screen (объявленному в Vcl.Forms) при их создании. Таким образом, вы можете создать небольшую вспомогательную функцию, подобную этой
function FindFormByName(const AName: string): TForm;
var
i: Integer;
begin
for i := 0 to Screen.FormCount - 1 do
begin
Result := Screen.Forms[i];
if (Result.Name = AName) then
Exit;
end;
Result := nil;
end;
6
David Heffernan
1 Сен 2014 в 23:26
Вы можете использовать FindWindow функция, если вы знаете заголовок формы или имя класса формы.
0
Ross Bush
1 Сен 2014 в 21:40
Этот ответ предполагает, что вы делаете приложение VCL. Я не знаю, имеет ли FireMonkey аналогичное решение.
Все формы добавляются к глобальному экрану (объявленному в Vcl.Forms) при их создании. Таким образом, вы можете сделать небольшую вспомогательную функцию, подобную этой
function FindFormByName(const AName: string): TForm;
var
i: Integer;
begin
for i := 0 to Screen.FormCount - 1 do
begin
Result := Screen.Forms[i];
if (Result.Name = AName) then
Exit;
end;
Result := nil;
end;