Как найти форму в делфи

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

Mlody87's user avatar

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 Consulting's user avatar

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;

David Heffernan's user avatar

answered Sep 1, 2014 at 18:23

Larsdk's user avatar

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 Bush's user avatar

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

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Ошибка, при нажатии на кнопку:

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;

Понравилась статья? Поделить с друзьями:
  • Как найти корни у неравенств
  • Как найти заказчиков на перевод
  • Как найти посылку по трек номеру казахстан
  • Мышка быстро кликается как исправить
  • Как найти телефон службы поддержки авито