Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Боращение к компоненту расположенному на другой форме [D5, Win95/98]


ProfiUgl ©   (2002-04-29 09:10:00) 

Доброго дня суток мастера!
У меня возникла вот такая проблема:
Например мне нужно поменять Caption у TLabel на другой форме(Form2 - MDI), причем на Form2 размещено 10 TLabel, и каждый раз смена Caption производится на разной TLabel, имя которой известнно.
Я делаю так:
procedure TButton1Click(Sender: TObject);
begin
With Form2 do
begin
TLabel(FindComponent(xxx)).Caption := "Ля-ля";
//где xxx - имя одной и TLabel
end;
end;
Возникает ошибка!
В чем дело? Модет кто поможет?


Anatoly Podgoretsky   (2002-04-29 11:38:00) [1]

При создании компонента указать собственником Form2


ProfiUgl   (2002-04-29 11:21:00) [2]

Виктор Щербаков © (29.04.02 10:30)
Извиняюсь за такой простой вопрос. А как сделать так чтобы Form2 являлась владельцем компонента с именем "List" + ss?


Виктор Щербаков   (2002-04-29 10:36:00) [3]

... либо переменная Form2 ссылается не на экземпляр класса TForm2.


Виктор Щербаков   (2002-04-29 10:30:00) [4]


> Этот компонент с именем ("List" + ss) я создавал в design-time
> следовательно у компонента owner получается Form1 или я
> что-то путаю?

Если так, то с Owner всё OK.
Но FindComponent всё равно возвращает nil. Неужели так сложно разобраться в причине? Она заключается в том, что Form2 не является владельцем компонента с именем "List" + ss.


Anatoly Podgoretsky   (2002-04-29 10:21:00) [5]

Практически у всех программистов происходят ошибки, а вот что зависит от программиста - хороший их быстро находит, а очень хороший использует with редко и с острожностью


Song   (2002-04-29 10:11:00) [6]

Anatoly Podgoretsky © (29.04.02 10:07)
Вообще with неизсекаемый источнок разного рода недоразумений
Не стал бы однозначно так утверждать. Зависит от программиста.


Anatoly Podgoretsky   (2002-04-29 10:07:00) [7]

Виктор Щербаков © (29.04.02 09:51)
Причины не знаю, а сомнение явно выражено :-)
Вообще with неизсекаемый источнок разного рода недоразумений


ProfiUgl   (2002-04-29 10:04:00) [8]

Виктор Щербаков © (29.04.02 09:51)
Этот компонент с именем ("List" + ss) я создавал в design-time следовательно у компонента owner получается Form1 или я что-то путаю?
А как присвоить моей компоненте owner Form2?


Виктор Щербаков   (2002-04-29 09:51:00) [9]

Какой owner у компонента с именем "List" + ss?
Может быть вовсе не Form2, а nil например.
Тогда FindComponent вернет nil, хотя компонент и будет отображаться на Form2.

Anatoly Podgoretsky © (29.04.02 09:48)
C with в данном коде всё OK, вроде нет причин для сомнений, а вот насчет самоуверенности - верно.


Anatoly Podgoretsky   (2002-04-29 09:48:00) [10]

Это причина, которая говорит об вреде использования with, разве у тебя было бы сомнение если бы with не использовал.

ProfiUgl © (29.04.02 09:10)
Плюс в коде несколько потенциальных ошибок, скажем ты или рисковый или слишком самоуверенный человек.

1. Form2 может быть недействительна или вообще другая
2. FindComponent может не найти твой компонент


ProfiUgl   (2002-04-29 09:44:00) [11]

На само то деле код во какой:
procedure TButton1Click(Sender: TObject);
Var s,ss : String;
begin
with form2 do
begin
s := kadridb.rsListSprav.fieldbyname("NmSprav").AsString;
ss := copy(s, 2, Length(s) - 1);
TIDGDBListView(FindComponent("List" + ss)).FillList;
end;
end;
Дело втом что в это же кусок кода в Form1 работает!?


Виктор Щербаков   (2002-04-29 09:35:00) [12]

Нет. Скорее всего ошибка в имени компонента ххх.
У меня твой код сработал.


ProfiUgl   (2002-04-29 09:30:00) [13]

Да AV возникает. Вероянто FindComponent производит поиск компанента не на Form2 а на Form1. Что делать?


Виктор Щербаков   (2002-04-29 09:14:00) [14]

Ну, по всей видимости FindComponent возвращает nil, что служит причиной возникновения AV.
Ведь AV возникает?


Наверх

Титульная страница Поиск, карта сайта Написать письмо