Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Имя свойства в течение выполнения программы

Delphi , Компоненты и Классы , Свойства и События

Имя свойства в течение выполнения программы

Если бы строители строили здания так же, как программисты пишут программы, первый залетевший дятел разрушил бы цивилизацию.


If ( Sender is TLabel ) then.. 

или, если вам заранее известен тип объекта, то можно так:


TLabel( Sender ).Caption 

Чтобы получить доступ к имени, воспользуйтесь одним из приведенных ниже примеров. Пример:


formname:=(myform as tobject).name; 

или


formname:=(myform as tcontrol).name; 

Это должно работать. Причина того, что этого не хочет делать сама Delphi в том, что у нее есть определенные элементы управления, у которых нет специфического имени и, следовательно, компилятор должен проверять каждый вызов для проверки его валидности.

Если вы используете свойство ClassName подобно этому:


with Sender as TForm do
  Label1.Caption := copy(ClassName,2,length(ClassName)-1);

Это даст желаемый эффект без дополнительного кодирования в обработчике формы OnCreate.

'Sender' может и не быть формой, которую вы пытаетесь обработать, и ваша программа получит исключительную ситуацию, сообщающую о неверном приведении типа. Я не уверен в том, что содержание (если оно есть) Sender в действительности является самой формой.

По крайней мере, от этого вы можете защититься сами, заключив в скобки вызов с приведением типа, и сделав предварительно простую проверку на нужный тип:


If Sender is TForm then
  Label1.Caption := (Sender as TForm).Name ;

Это в случае, если вы пытаетесь выполнить следующее:


Label1.Caption := Form1.Name ;

Это целый сонм проблем. Я читал, что при исполнении этого кода или не доступно свойство Form (во время выполнения программы), или, что чаще, возникает заблуждение относительно инициализируемого класса (вернее, его имени, Form1). Если вы тщательно читали документацию по Delphi, то наверняка заметили тот факт, что установка свойства в Инспекторе Объектов (Object Inspector) НЕ означает его автоматическую установку во время выполнения программы. Чтобы с честью выбраться из этой ситуации, необходимо явно установить свойство (в нашем случае свойство .Name) в методе фомы .Create. Это может выглядеть приблизительно так:


procedure TForm1.Create( Sender : TObject ) ;
begin
  Form1.Name := 'Form1' ;
end ;

procedure TForm1.Button1Click( Sender : TObject ) ;
begin
  Label1.Caption := Form1.Name ;
end ;


var
  TC: TComponent;
begin
  TC := label1.Owner;
  label1.Caption := TC.ClassName;
end;

К своей форме я добавил кнопку, и в обработчике нажатия на нее я записал следующий код:


name := 'AName';

Затем, после щелчка на кнопке, я мог бы щелкнуть на форме, и заголовок метки изменился бы на 'AName'. Решением может служить определение свойcтва Name в обработчике события создания формы. Т.е., если вы назвали форму именем MyForm, то в обработчике события OnCreate вы должны написать следующее:


name := 'MyForm';

Это решит вашу проблему, а я закругляюсь.

Статья Имя свойства в течение выполнения программы раздела Компоненты и Классы Свойства и События может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Свойства и События ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
19.04.2024 22:44:20/0.037307977676392/2