powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос по наследованию форм
8 сообщений из 8, страница 1 из 1
Вопрос по наследованию форм
    #39766893
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Delphi XE7.

Создаем пустую форму и в секции public размещаем объявление класса TButton с именем Button1:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    Button1 : TButton;
  end;

{ DFM }
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 299
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
end



Наследуемся от TForm1 и кидаем на форму наследника компонент TButton с именем Button1:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
type
  TForm2 = class(TForm1)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

{ DFM }
inherited Form2: TForm2
  Caption = 'Form2'
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 40
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end
end



Проект собирается, никаких ошибок нет.

Так и должно быть, что разрешено дублирование имен компонентов предка и наследника?
Если да, то каков в этом смысл? И как обратиться из наследника к Button1 предка?

P.S. Обнаружил такую загогулину в унаследованном коде.

С уважением, Polesov.
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39766903
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В секции public указана переменная с названием Button1
А в dfm - просто инструкция о том, что при создании формы нужно не забыть создать экземпляр класса TButton у которого свойство NAME = 'Button1'.

То есть пересекаются имя переменной и значение свойства еще не созданного объекта
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39766905
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя стоп.
У Вас две переменные с одинаковым названием Button1

Одна в предке, вторая в потоке.

ОО это не запрещает. Но в потомке Вы потеряете возможность обращаться к Button1 из предка. Ну только разве что приведением типа:

TForm1(Self).Button1
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39766908
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39766923
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, вопрос закрыт.
Спасибо.
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39767188
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SinemuriusОО это не запрещает. Но в потомке Вы потеряете возможность обращаться к Button1 из предка
Код: pascal
1.
Btn := inherited Button1;
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39767202
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Код: pascal
1.
Btn := inherited Button1;


Ошибка на этапе компиляции
Код: pascal
1.
E2096 Method identifier expected
...
Рейтинг: 0 / 0
Вопрос по наследованию форм
    #39767627
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
Код: pascal
1.
E2096 Method identifier expected

Да. Для полей не работает. Только для методов и свойств.

Кстати, вот еще один аргумент адептам прямого доступа к полям объявлять свойства
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос по наследованию форм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]