Получение имени формы

Если вы используете свойство ClassName...

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

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

 

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

Во всяком случае, вы можете защититься от такой ситуации, сделав предварительную проверку соответствия типов, и приведя Sender к класу вашей формы, как показано ниже:

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

Выполнить этот код можно так:

Label1.Caption := Form1.Name ;

Но здесь появляется масса других проблем. Мне писали гневные письма о том, что свойство у Form не доступно во время выполнения приложения, что, вероятнее всего связано с тем, что класс формы еще не был проинициализирован. Если бы читали документацию по 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 ;

 

face="Courier New" size="2"> var
TC: TComponent;
begin
TC := label1.Owner;
label1.Caption := TC.ClassName;
end;

 

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

 

name := 'AName';

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

 

name := 'MyForm';

Я надеюсь, это поможет вам решить проблему.

 
« Предыдущая статья   Следующая статья »