Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.84] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер!
Создаю два компонента, второй должен увидеть первый компонент и читать его свойства. Схема кода второго компонета: unit MyComponent2; interface uses Windows, Messages, SysUtils, Variants, Classes, Unit2; type TMyComponent2 = class(TComponent) private fIndex : Integer; fSearch : TMyComponent; function GetIndex : Integer; protected //............... public constructor Create(AOwner: TComponent);override; destructor Destroy;override; published property SearchClass : TMyComponent read fSearch write fSearch; property IndexElement : Integer read GetIndex write fIndex; end; procedure Register; implementation { TMyComponent } constructor TMyComponent2.Create(AOwner: TComponent); begin fSearch := TMyComponent.Create(Self); inherited; end; destructor TMyComponent2.Destroy; begin fSearch.Free; inherited; end; function TMyComponent2.GetIndex : Integer; begin Result := fSearch.IndexList; end; procedure Register; begin RegisterComponents('test', [TMyComponent2]); end; В дизайнтайм есть поле у второго компонета со свойством SearchClass типа раскрывающегося списка. Когда кладу на форму нового проекта оба компонента, то у компонента TMyComponent2 в выпадающем списке свойства SearchClass регистрируется первый компонент и его можно выбрать после чего прекрасно читаются все его свойства. Но, проблема в том, что если очистить поле свойства SearchClass второго компонента в дизайнтайм вылетает ошибка, при которой виснет даже сама Делфи 2010. Подскажите как избежать этой ошибки? Я понимаю, что нужно проверить есть связьвторого компонента с первым и очистить все читаемые от первого компонента параметры с его доступных свойств, но как это сделать? Спасибо всем за помощь. |
Сообщ.
#2
,
|
|
|
1) я второй раз вижу у тебя бесмысленную конструкцию насчет
Цитата SkAndriy @ property IndexElement : Integer read GetIndex write fIndex; зачем write fIndex если fIndex все равно не юзается. вот за подобных вещей и падает Result := fSearch.IndexList; |
Сообщ.
#3
,
|
|
|
Нет проблема не в этом. Как раз свойство прекрасно читает в IndexElement из первого компонента. Проблема в том, что если я сотру (удалю, очищу) в дизайн тайм поле свойства SearchClass и переведу фокус например на другое поле то вылетает ошибка и делфи виснет. что делать? какую и где поставить проверку. спасибо
|
Сообщ.
#4
,
|
|
|
Вы были правы не хватало элементарной проверки. Спасибо за помощь.
|
Сообщ.
#5
,
|
|
|
это типа: Моя газовая плита хорошо работает но как только я перекрою газ и посмотрю в окно то она гаснет.
|
Сообщ.
#6
,
|
|
|
Еще раз спасибо.
|