На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Дизайнер компонента
    Здрасте, интерсует вопрос, как динамически указывать какие свойства сериализовывать у компонета а кикие нет, вот смотрите, допустим есть 2 компонента:

    Певый, со свойством A:

    ExpandedWrap disabled
       public partial class BaseComponent : Component
          {
              public BaseComponent ()
              {
                  InitializeComponent ();
              }
       
              public BaseComponent (IContainer container)
              {
                  container.Add (this);
       
                  InitializeComponent ();
              }
       
              [DefaultValue(0)]
              [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
              public int A
              {
                  get;
                  set;
              }
          }


    Второй, у которого это свойство A указанно в 123 скажем
    ExpandedWrap disabled
       public partial class MyComponen : BaseComponent
          {
              public MyComponen ()
              {
                  InitializeComponent ();
              }
       
              public MyComponen (IContainer container)
              {
                  container.Add (this);
       
                  InitializeComponent ();
              }
       
              /// <summary>
              /// Required method for Designer support - do not modify
              /// the contents of this method with the code editor.
              /// </summary>
              private void InitializeComponent ()
              {
                  //
                  // MyComponent
                  //
                  this.A = 123;
              }
          }


    Далее, беру компонент MyComponen, и кидаю его на форму или на другой компонент, и тут же вижу в дизайнере

    ExpandedWrap disabled
                  //
                  // myComponent1
                  //
                  this.myComponent1.A = 123;


    Собственно вопрос, как это убрать? Мне то известно, что свойство равно 123. Есть какойто умный аттрибут который посмотрит в базовый класса MyComponent и сравнит её с текущим значением и пометит серым если значения совпадают? Вариант с переопределением DefaultValue, не предлагать.
      а похимичить с
      [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
      не пробывали?
        Цитата Alexus @
        а похимичить с
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        не пробывали?

        пробовал
          Вроде бы если вы сделаете свойство [Browsable(false)] - то дизайнер не будет генерить для него код, который вас раздражает. Во многих случаях это не приемлемо, но может вам и подойдёт.

          Добавлено
          Ещё идея. Поэксперементиуйте с System.ComponentModel.DefaultValueAttribute (или подобными, елси найдёте).
          По идее, если значение свойства совпадает со значением по-умолчанию, дизайнер может это прошарить и не генерить код. К тому же вероятно заработает фича с выдилением жирным значений изменённых свойств в PropertyGrid, что тоже приятно.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0197 ]   [ 15 queries used ]   [ Generated: 18.05.24, 14:03 GMT ]