На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Собственные контролы & DisignTime , WM6.1 & VS2008, .Net 3.5
    Сделал контрол. Когда добавляю его на форму, то он выглядит как стандартный пустой квадрат вместо того, что бы отображаться с контролами. В режиме дизайна дополнительные мои свойства отображаются но имеют значения поумолчанию для типа. Т.е. они у меня decimal, соовтетственно все 0, а надо что бы у них было некоторое заданное поумолчанию значение. И что бы оно принималось в программе.

    Не пойму чего надо для этого сделать. Поискал вроде про атрибуты, вроде есть DefaultValue атрибут, но это похоже не то...

    Вобщем может пример или ссылку на какую-нибудь статью кто-нибудь даст :)
      Атрибут DefaultValue позволяет не инициализировать значение в дизайнере, если текущее значение соответствует этому самому DefaultValue, но при этом надо вручную создавать поле для свойства, а не позволять его генерировать компилятору. Указав значение по-умолчанию для поля и указав его же в DefaultValue, получаем нужное значение, которое не светится в дизайнере.

      ExpandedWrap disabled
        private decimal val = 3;
         
        [DefaultValue(3)]
        public decimal MyVal
        {
           get { return val; }
           set { val = value; }
        }


      Чтобы контрол себя отрисовал как нужно тебе, переопределяй событие Paint и PaintBackground. У всех наследников Control есть свойство DesignTime, позволяющее определить, в дизайнере дело происходит или в рантайме.

      Добавлено
      Для продвинутого управления своим контролом в дизайнере придётся реализовать ControlDesigner
        Цитата Spawn.NET @
        но при этом надо вручную создавать поле для свойства, а не позволять его генерировать компилятору.

        Переделал с автосвойство на приватное поле. Ничего не изменилось.
        Цитата Spawn.NET @
        Указав значение по-умолчанию для поля и указав его же в DefaultValue, получаем нужное значение, которое не светится в дизайнере.

        Не понял, что значит не светится? Не появляется в InitiaizeComponents наверно? Т.к. считается что в конструкторе задано? Или я чего не так понял?

        Цитата Spawn.NET @
        Чтобы контрол себя отрисовал как нужно тебе, переопределяй событие Paint и PaintBackground. У всех наследников Control есть свойство DesignTime, позволяющее определить, в дизайнере дело происходит или в рантайме.

        Виноват, имелся ввиду UserControl. Вроде как для него не надо Paint переопределять, а просто на него накидать компонент.

        Ладно. Может не совсем внятно объяснил.

        Сделал контрол, наследник от UserControl.
        Положил на него нужные мне компоненты, выставил все размеры.
        user posted image

        Положил его на форму, все отлично работает в _ран-тайме_.

        В дизайн-тайме же контрол на форме выглядит как пустой прямоугольник размером по умолчанию (как появлися UserControl). Т.е. на нем ничего нет, и он не соответствует установленным размерам. Но это _только_ в дизайн-тайме
        user posted image

        Далее, в окне пропиртиес, в дизайн-тайме, его свойства (те, которые сделал я) появляются на закладке misc, и все имеют значения 0. Хотя в конструкторе я устанавливаю им занчения по умолчанию.
        user posted image

        Отсюда два вопроса.
        1 Как сделать так, что бы в дизайн-тайме брошенный на форму мой контрол выглядел так же как и в собственном дизайн-тайме, со всеми текстбоксами и прочими компонентами.
        2 Как сделать так, что бы свойства отображались в окне пропиртиес в дизайн-тайме с теми занчениями, которые у них реально есть.
          В CF что-то наворотили с дизайнером... Попробуй почитать эту статью.

          Добавлено
          Для корректного отображения в дизайнере нужен DesktopCompatibleAttribute... а для дефолтных вроде нужен ApplyDeviceDefaultsAttribute, только кастомные атрибуты задаются через одно место. Эта статья тоже объясняет что к чему.
          Сообщение отредактировано: Spawn.NET -
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0258 ]   [ 17 queries used ]   [ Generated: 25.04.24, 12:29 GMT ]