Форум: "Компоненты";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];
ВнизОповещение об изменении свойства Найти похожие ветки
← →
Priest © (2005-11-01 12:22) [0]У меня есть компонент, содержащий внутри себя коллекцию. Элемент коллекции содержит свойства Name:String и Value:Variant. Другой компонент должен ссылаться на конкретный элемент коллекции. Чтобы сделать возможность задания своства в DesignTime, я сделал 2 свойтсво. Первое ссылается на 1-й компонент, а второе содержит имя Name того элемента, который необходимо использовать...Но данное решение имее недостаток, связаный с удалением элемента коллекции. При удалении необходимо оповестить второй компонент....Как быть. Может я с самого начала сделал неверно с 2-я свойствами?
← →
Igorek © (2005-11-01 12:50) [1]
> При удалении необходимо оповестить второй компонент....Как
> быть.
Notification.
> Может я с самого начала сделал неверно с 2-я свойствами?
Очень может быть что плохой дизайн, хотя пока ничего угрожающего.
Варианты:
- сделать коллекцию отдельным компонентом
- слить эти два компонента в один
- сделать одно св-во + редактор в виде выпадающего списка (заполняешь значениями перебирая все доступные компоненты с коллекциями и для каждого перебирая елементы коллекции);
Это зависит от конкретного случая. Но полюбому рассмотри несколько альтернатив.
← →
Priest © (2005-11-01 13:17) [2]>>Notification.
Только для компонентов, а у меня элемент коллекции
- сделать коллекцию отдельным компонентом
Так и есть
- слить эти два компонента в один
Нельзя. Один из них не мой...А делать вложеный смысла пока не вижу
сделать одно св-во + редактор в виде выпадающего списка (заполняешь значениями перебирая все доступные компоненты с коллекциями и для каждого перебирая елементы коллекции);
А как сделать чтобы элементы кооллекции можно было выбирать...А то сделал свойство тип, которого является элементом колекции, а в выпадающем спике не появляется..... Помогите примером
← →
Юрий Зотов © (2005-11-01 16:41) [3]Уточните: классы элемента коллекции, самой коллекции и содержащего ее компонента - не Ваши?
← →
Priest © (2005-11-01 16:52) [4]Не мои. Есть компонент. У него внутри есть коллекция. Я хочу в своём компоненте ссылаться на элемент той коллекции. Я сделал свойство, типом которого является тип элемента той колекции. Но в инспекторе объектов не отображаются значения. Поэтому я сделал 2 свойства. В первом сохраняю ссылку на компонент, в кот. есть колекция. А во втором свойстве сохраняю имя элемента коллекции. У элемента колекции есть свойство Name.
Вот примерный код
type
TXXColectionItem = class(TColectionItem)
private
FName: string;
FValue: Variant;
published
property Name: string read FName write FName;
property Value: Variant read FValue write FValue;
end;
TXXColection = class(TColection)
end;
TXXComponent = class(TComponent)
private
FXXCollection: TXXColection;
published
property XXCollection: TXXColection read FXXCollection write FXXCollection;
end;
TMyComponent = class(TComponent)
private
// FXXColectionItem: TXXColectionItem;
FXXComponent: TXXComponent;
FXXItemName: string;
public
published
//Не появляется выпадающий список, поэтому закоментарил
// property XXColectionItem: TXXColectionItem read FXXColectionItem write
// FXXColectionItem;
property XXComponent: TXXComponent read FXXComponent write FXXComponent;
//Здесь я храню TXXColectionItem.Name
property XXItemName: string read FXXItemName write FXXItemName;
end;
Хотелось бы более элегантный код
← →
Igorek © (2005-11-01 17:11) [5]
> >>Notification.
>
> Только для компонентов, а у меня элемент коллекции
Иначе по правильному никак не получится - компонент чужой и не обязан уведомлять когда у него внутри меняется какая-то коллекция. И у тебя будет битая ссылка. А в общем случае определить, что она битая невозможно. Т.е. тот компонент не рассчитан на такое использование его коллекции. Иначе он бы давал соотв. интерфейс - напр. давал возможность подписки чужого callback метода для уведомления удаления элемента коллекции.
Можно конечно городить подпорки - например время от времени (или при использовании ссылки) проверять тот компонент - есть ли в коллекции такой элемент... Но это уже не гуд.
← →
Priest © (2005-11-01 17:25) [6]>>Igorek
Ладно, а как сделать редактор для свойства
property XXColectionItem: TXXColectionItem
Чтобы можно было выбрать доступные элементы коллекции?
← →
Priest © (2005-11-02 13:15) [7]Так как всё таки сделать редактор для элемента?
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c