Свойство UserControl типа Enum отображается в конструкторе как bool или не отображается вообще

StackOverflow https://stackoverflow.com/questions/64139

Вопрос

У меня есть usercontrol, который имеет несколько общедоступных свойств.Эти свойства автоматически отображаются в окне свойств конструктора VS2005 в категории "Разное".За исключением двух свойств, которые являются перечислениями, отображаются некорректно.

Первое включение использует следующее перечисление:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

Это не отображается в конструкторе вообще.

Второй использует это перечисление:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

Этот появляется, но дизайнер, похоже, думает, что это bool и показывает только True и False.И когда вы создадите проект с помощью элементов управления, он скажет, что не может преобразовать тип bool в AutoSizeMode.

Кроме того, эти перечисления объявляются глобально для пространства имен, поэтому они доступны везде.

Есть какие-нибудь идеи?

Это было полезно?

Решение

Для начала, второе перечисление, AutoSizeMode, объявлено в Системе.Windows.Формы.Так что это может вызвать у дизайнера некоторые проблемы.

Во-вторых, вам может оказаться полезной следующая страница в MSDN:

http://msdn.microsoft.com/en-us/library/tk67c2t8.aspx

Другие советы

Я провел небольшой тест с вашей проблемой (я не уверен, правильно ли я ее понял), и эти свойства отображаются в конструкторе правильно, и все перечисления отображаются соответствующим образом.Если это не то, что вы ищете, тогда, пожалуйста, объяснитесь подробнее.

Не зацикливайтесь на _углой части, брошенной туда.Я просто использовал его для быстрого теста.

using System.ComponentModel;
using System.Windows.Forms;

namespace SampleApplication
{
    public partial class CustomUserControl : UserControl
    {
        public CustomUserControl()
        {
            InitializeComponent();
        }

        /// <summary>
        /// We're hiding AutoSizeMode in UserControl here.
        /// </summary>
        public new enum AutoSizeMode { None, KeepInControl }
        public enum VerticalControlAlign { Center, Top, Bottom }

        /// <summary>
        /// Note that you cannot have a property  
        /// called VerticalControlAlign if it is   
        /// already defined in the scope.
        /// </summary>
        [DisplayName("VerticalControlAlign")]
        [Category("stackoverflow.com")]
        [Description("Sets the vertical control align")]
        public VerticalControlAlign VerticalControlAlign_Ugly
        {
            get { return m_align; }
            set { m_align = value; }
        }
        private VerticalControlAlign m_align;        

        /// <summary>
        /// Note that you cannot have a property  
        /// called AutoSizeMode if it is   
        /// already defined in the scope.
        /// </summary>
        [DisplayName("AutoSizeMode")]
        [Category("stackoverflow.com")]
        [Description("Sets the auto size mode")]
        public AutoSizeMode AutoSizeMode_Ugly
        {
            get { return m_autoSize; }
            set { m_autoSize = value; }
        }
        private AutoSizeMode m_autoSize;    
    }
}

Вам не нужно делать ваши перечисления глобальными, чтобы они были видны в конструкторе.

Уточните, пожалуйста:

  1. если вы добавите другое значение в свое перечисление AutoSizeMode, будет ли оно по-прежнему отображаться как логическое?
  2. Если (вместо этого) вы измените имя enum, будет ли оно по-прежнему отображаться как логическое значение?

Некоторые вещи, которые стоит попробовать (режим конструктора в VS2005, который я нахожу несколько неустойчивым):

  1. Откройте свой web.config и добавьте: batch="false" к вашему <compilation> бирка.
  2. Попробуйте установить значения по умолчанию для ваших перечислений:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top