Свойство UserControl типа Enum отображается в конструкторе как bool или не отображается вообще - PullRequest
1 голос
/ 15 сентября 2008

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

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

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

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

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

public enum AutoSizeMode
{
    None,
    KeepInControl
}

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

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

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 15 сентября 2008

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

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

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;    
    }
}
0 голосов
/ 15 сентября 2008

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

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

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
0 голосов
/ 15 сентября 2008

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...