DefaultValue attribute, Enum type.
От: barcik  
Дата: 08.02.08 10:12
Оценка:
Всем привет.
Пишу CustomControl.

[DefaultValue(ArrowDirectionType.None)]
 public ArrowDirectionType DirectionType
 {
  get { return _direction; }
  set { _direction = value; }
 }

 public enum ArrowDirectionType
 {
  Left,
  Right,
  None
 }
private ArrowDirectionType _direction;


Проблема в том, что DefaultValue для свойства не устанавливается, вместо ожидаемого
ArrowDirectionType.None получаю ArrowDirectionType.Left

Help.
Заранее спасибо.
Re: DefaultValue attribute, Enum type.
От: _FRED_ Черногория
Дата: 08.02.08 10:24
Оценка: 2 (1)
Здравствуйте, barcik, Вы писали:

B>Пишу CustomControl.


B>Проблема в том, что DefaultValue для свойства не устанавливается, вместо ожидаемого

B>ArrowDirectionType.None получаю ArrowDirectionType.Left

И не должен. Надо самому присваивать значение по-умолчанию, например, в конструкторе. Аттрибут лишь для дизайнеров и для сравнения — является ли текущее значение значением по-умолчанию. Так же значение по-умолчанию нужно самому выставлять в методе ShouldSerializePropertyName, если такой метод используется.
Help will always be given at Hogwarts to those who ask for it.
Re: DefaultValue attribute, Enum type.
От: Lloyd Россия  
Дата: 08.02.08 10:24
Оценка: 2 (1)
Здравствуйте, barcik, Вы писали:

B>Проблема в том, что DefaultValue для свойства не устанавливается, вместо ожидаемого

B>ArrowDirectionType.None получаю ArrowDirectionType.Left

B>Help.

B>Заранее спасибо.

Code generators can use the default values also to determine whether code should be generated for the member.


Это означает, что если значение DirectionType было выставлено в ArrowDirectionType.None, то дизайнер не будет генерить код для DirectionType.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re: DefaultValue attribute, Enum type.
От: AK85 Беларусь  
Дата: 08.02.08 10:29
Оценка: 2 (1)
Здравствуйте, barcik, Вы писали:

B>Всем привет.

B>Пишу CustomControl.

B>
B>[DefaultValue(ArrowDirectionType.None)]
B> public ArrowDirectionType DirectionType
B> {
B>  get { return _direction; }
B>  set { _direction = value; }
B> }

B> public enum ArrowDirectionType
B> {
B>  Left,
B>  Right,
B>  None
B> }
B>private ArrowDirectionType _direction;
B>


B>Проблема в том, что DefaultValue для свойства не устанавливается, вместо ожидаемого

B>ArrowDirectionType.None получаю ArrowDirectionType.Left

B>Help.

B>Заранее спасибо.

Инициализирующее значение надо задавать самому, DefaultValueAttribute указывает дизайнеру в каком случае нужно сериализовывать свойство, если в пропертигриде задано значение отличное от дефолтного, в файле *.designer.cs появится строчка типа myControl1.ArrowDirectionType = ???, иначе ее просто не будет. А у вас видимо (int)ArrowDirectionType.Left == 0.
Re[2]: DefaultValue attribute, Enum type.
От: Mmmaloy Германия  
Дата: 08.02.08 11:50
Оценка: -1
public enum ArrowDirectionType
B> {
B> Left,
B> Right,
B> None = 0
B> }
Re[2]: DefaultValue attribute, Enum type.
От: Mmmaloy Германия  
Дата: 08.02.08 11:52
Оценка:
Извиняюсь, мой постинг автору ветки
Re: DefaultValue attribute, Enum type.
От: _FRED_ Черногория
Дата: 08.02.08 12:05
Оценка:
Здравствуйте, barcik, Вы писали:

B>Проблема в том, что DefaultValue для свойства не устанавливается, вместо ожидаемого

B>ArrowDirectionType.None получаю ArrowDirectionType.Left

Вот что надо знать при рассмотрении свойств компонентов вообще: Properties in Windows Forms Controls и в частности про значения по-умолчанию: Defining Default Values with the ShouldSerialize and Reset Methods
Help will always be given at Hogwarts to those who ask for it.
Re[3]: DefaultValue attribute, Enum type.
От: Хитрик Денис Россия RSDN
Дата: 11.02.08 09:23
Оценка:
Здравствуйте, Mmmaloy, Вы писали:

M>public enum ArrowDirectionType

B>> {
B>> Left,
B>> Right,
B>> None = 0
B>> }

Ни в коем случае!

using System;

namespace Enum0123Test
{
    class Program
    {
        enum TestEnum
        {
            Left,
            Right,
            None = 0
        }

        static void Main(string[] args)
        {
            Console.WriteLine((int)TestEnum.Left);
            Console.WriteLine((int)TestEnum.Right);
            Console.WriteLine((int)TestEnum.None);
            
            Console.ReadLine();
        }
    }
}


Этот код выведет
0
1
0

что, очевидно, является логической ошибкой.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: DefaultValue attribute, Enum type.
От: фонарь Беларусь блог
Дата: 11.02.08 09:38
Оценка:
Здравствуйте, barcik, Вы писали:

B> public enum ArrowDirectionType

B> {
B> Left,
B> Right,
B> None
B> }
B>private ArrowDirectionType _direction;
B>[/c#]

По правильному надо None ставить в начало. Enum'ы это по сути типизированные int'ы, так что первому элементу из перечисления по умолчанию присваивается 0. Поэтому рекомендуется значения, соответствующие логическому нулю, ставить на первое место — это, кстати, должно и проблему решить
Re: DefaultValue attribute, Enum type.
От: GlassyEye Россия  
Дата: 11.02.08 09:55
Оценка:
private ArrowDirectionType _direction = ArrowDirectionType.None

[DefaultValue(typeof(ArrowDirectionType),"None")]
public ArrowDirectionType DirectionType
{
  get { return _direction; }
  set { _direction = value; }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.