Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизБоращение к компоненту расположенному на другой форме Найти похожие ветки
← →
ProfiUgl (2002-04-29 09:10) [0]Доброго дня суток мастера!
У меня возникла вот такая проблема:
Например мне нужно поменять 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;
Возникает ошибка!
В чем дело? Модет кто поможет?
← →
Виктор Щербаков (2002-04-29 09:14) [1]Ну, по всей видимости FindComponent возвращает nil, что служит причиной возникновения AV.
Ведь AV возникает?
← →
ProfiUgl (2002-04-29 09:30) [2]Да AV возникает. Вероянто FindComponent производит поиск компанента не на Form2 а на Form1. Что делать?
← →
Виктор Щербаков (2002-04-29 09:35) [3]Нет. Скорее всего ошибка в имени компонента ххх.
У меня твой код сработал.
← →
ProfiUgl (2002-04-29 09:44) [4]На само то деле код во какой:
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 работает!?
← →
Anatoly Podgoretsky (2002-04-29 09:48) [5]Это причина, которая говорит об вреде использования with, разве у тебя было бы сомнение если бы with не использовал.
ProfiUgl © (29.04.02 09:10)
Плюс в коде несколько потенциальных ошибок, скажем ты или рисковый или слишком самоуверенный человек.
1. Form2 может быть недействительна или вообще другая
2. FindComponent может не найти твой компонент
← →
Виктор Щербаков (2002-04-29 09:51) [6]Какой owner у компонента с именем "List" + ss?
Может быть вовсе не Form2, а nil например.
Тогда FindComponent вернет nil, хотя компонент и будет отображаться на Form2.
Anatoly Podgoretsky © (29.04.02 09:48)
C with в данном коде всё OK, вроде нет причин для сомнений, а вот насчет самоуверенности - верно.
← →
ProfiUgl (2002-04-29 10:04) [7]Виктор Щербаков © (29.04.02 09:51)
Этот компонент с именем ("List" + ss) я создавал в design-time следовательно у компонента owner получается Form1 или я что-то путаю?
А как присвоить моей компоненте owner Form2?
← →
Anatoly Podgoretsky (2002-04-29 10:07) [8]Виктор Щербаков © (29.04.02 09:51)
Причины не знаю, а сомнение явно выражено :-)
Вообще with неизсекаемый источнок разного рода недоразумений
← →
Song (2002-04-29 10:11) [9]Anatoly Podgoretsky © (29.04.02 10:07)
Вообще with неизсекаемый источнок разного рода недоразумений
Не стал бы однозначно так утверждать. Зависит от программиста.
← →
Anatoly Podgoretsky (2002-04-29 10:21) [10]Практически у всех программистов происходят ошибки, а вот что зависит от программиста - хороший их быстро находит, а очень хороший использует with редко и с острожностью
← →
Виктор Щербаков (2002-04-29 10:30) [11]
> Этот компонент с именем ("List" + ss) я создавал в design-time
> следовательно у компонента owner получается Form1 или я
> что-то путаю?
Если так, то с Owner всё OK.
Но FindComponent всё равно возвращает nil. Неужели так сложно разобраться в причине? Она заключается в том, что Form2 не является владельцем компонента с именем "List" + ss.
← →
Виктор Щербаков (2002-04-29 10:36) [12]... либо переменная Form2 ссылается не на экземпляр класса TForm2.
← →
ProfiUgl (2002-04-29 11:21) [13]Виктор Щербаков © (29.04.02 10:30)
Извиняюсь за такой простой вопрос. А как сделать так чтобы Form2 являлась владельцем компонента с именем "List" + ss?
← →
Anatoly Podgoretsky (2002-04-29 11:38) [14]При создании компонента указать собственником Form2
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c