Pergunta

Eu tenho um usercontrol que possui várias propriedades públicas.Essas propriedades aparecem automaticamente na janela de propriedades do designer VS2005 na categoria "Diversos".Exceto que duas das propriedades que são enumerações não aparecem corretamente.

O primeiro usa a seguinte enumeração:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

Isso não aparece no designer de forma alguma.

O segundo usa este enum:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

Este aparece, mas o designer parece pensar que é um bool e mostra apenas Verdadeiro e Falso.E quando você cria um projeto usando os controles, ele dirá que não é possível converter o tipo bool em AutoSizeMode.

Além disso, essas enums são declaradas globalmente no Namespace, portanto, são acessíveis em qualquer lugar.

Alguma ideia?

Foi útil?

Solução

Para começar, o segundo enum, AutoSizeMode, é declarado em System.Windows.Forms.Isso pode causar alguns problemas ao designer.

Em segundo lugar, você pode achar útil a seguinte página no MSDN:

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

Outras dicas

Fiz um pequeno teste com o seu problema (não tenho certeza se entendi corretamente), e essas propriedades aparecem corretamente no designer e todas as enumerações são mostradas adequadamente.Se não é isso que você está procurando, explique-se melhor.

Não se preocupe com a parte _Ugly lançada aí.Eu apenas usei para um teste rápido.

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;    
    }
}

Você não precisa tornar suas enumerações globais para que fiquem visíveis no designer.

Esclareça por favor:

  1. se você adicionar outro valor à sua enumeração AutoSizeMode, ele ainda aparecerá como booleano?
  2. Se (em vez disso) você alterar o nome de enum, ele ainda aparecerá como booleano?

Algumas coisas para tentar (o modo designer no VS2005 achei um tanto esquisito):

  1. Abra seu web.config e adicione: batch="false" para o seu <compilation> marcação.
  2. Tente definir padrões para suas enumerações:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top