Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.227.69] |
|
Сообщ.
#1
,
|
|
|
Сделал контрол. Когда добавляю его на форму, то он выглядит как стандартный пустой квадрат вместо того, что бы отображаться с контролами. В режиме дизайна дополнительные мои свойства отображаются но имеют значения поумолчанию для типа. Т.е. они у меня decimal, соовтетственно все 0, а надо что бы у них было некоторое заданное поумолчанию значение. И что бы оно принималось в программе.
Не пойму чего надо для этого сделать. Поискал вроде про атрибуты, вроде есть DefaultValue атрибут, но это похоже не то... Вобщем может пример или ссылку на какую-нибудь статью кто-нибудь даст |
Сообщ.
#2
,
|
|
|
Атрибут DefaultValue позволяет не инициализировать значение в дизайнере, если текущее значение соответствует этому самому DefaultValue, но при этом надо вручную создавать поле для свойства, а не позволять его генерировать компилятору. Указав значение по-умолчанию для поля и указав его же в DefaultValue, получаем нужное значение, которое не светится в дизайнере.
private decimal val = 3; [DefaultValue(3)] public decimal MyVal { get { return val; } set { val = value; } } Чтобы контрол себя отрисовал как нужно тебе, переопределяй событие Paint и PaintBackground. У всех наследников Control есть свойство DesignTime, позволяющее определить, в дизайнере дело происходит или в рантайме. Добавлено Для продвинутого управления своим контролом в дизайнере придётся реализовать ControlDesigner |
Сообщ.
#3
,
|
|
|
Цитата Spawn.NET @ но при этом надо вручную создавать поле для свойства, а не позволять его генерировать компилятору. Переделал с автосвойство на приватное поле. Ничего не изменилось. Цитата Spawn.NET @ Указав значение по-умолчанию для поля и указав его же в DefaultValue, получаем нужное значение, которое не светится в дизайнере. Не понял, что значит не светится? Не появляется в InitiaizeComponents наверно? Т.к. считается что в конструкторе задано? Или я чего не так понял? Цитата Spawn.NET @ Чтобы контрол себя отрисовал как нужно тебе, переопределяй событие Paint и PaintBackground. У всех наследников Control есть свойство DesignTime, позволяющее определить, в дизайнере дело происходит или в рантайме. Виноват, имелся ввиду UserControl. Вроде как для него не надо Paint переопределять, а просто на него накидать компонент. Ладно. Может не совсем внятно объяснил. Сделал контрол, наследник от UserControl. Положил на него нужные мне компоненты, выставил все размеры. Положил его на форму, все отлично работает в _ран-тайме_. В дизайн-тайме же контрол на форме выглядит как пустой прямоугольник размером по умолчанию (как появлися UserControl). Т.е. на нем ничего нет, и он не соответствует установленным размерам. Но это _только_ в дизайн-тайме Далее, в окне пропиртиес, в дизайн-тайме, его свойства (те, которые сделал я) появляются на закладке misc, и все имеют значения 0. Хотя в конструкторе я устанавливаю им занчения по умолчанию. Отсюда два вопроса. 1 Как сделать так, что бы в дизайн-тайме брошенный на форму мой контрол выглядел так же как и в собственном дизайн-тайме, со всеми текстбоксами и прочими компонентами. 2 Как сделать так, что бы свойства отображались в окне пропиртиес в дизайн-тайме с теми занчениями, которые у них реально есть. |
Сообщ.
#4
,
|
|
|
В CF что-то наворотили с дизайнером... Попробуй почитать эту статью.
Добавлено Для корректного отображения в дизайнере нужен DesktopCompatibleAttribute... а для дефолтных вроде нужен ApplyDeviceDefaultsAttribute, только кастомные атрибуты задаются через одно место. Эта статья тоже объясняет что к чему. |