Pregunta

Tengo un control de usuario que tiene varias propiedades públicas.Estas propiedades se muestran automáticamente en la ventana de propiedades de la VS2005 diseñador en virtud de la "Misc" de la categoría.Excepto dos de las propiedades que son enumeraciones no se muestran correctamente.

El primero utiliza la siguiente enumeración:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

Esto no se muestra en el diseñador en todos los.

El segundo utiliza esta enumeración:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

Esta muestra, pero el diseñador parece pensar que es un bool y sólo muestra la Verdadera y la Falsa.Y cuando se construye un proyecto utilizando los controles que se va a decir que no se puede convertir el tipo bool a AutoSizeMode.

Además, estas enumeraciones son declarados globably para el espacio de Nombres, por lo que son accesibles en todas partes.

Alguna idea?

¿Fue útil?

Solución

Para empezar, la segunda enum, AutoSizeMode se declara en el Sistema.Windows.Los formularios.De modo que pueda causar el diseñador de algunos temas.

En segundo lugar, usted puede encontrar la siguiente página en MSDN útil:

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

Otros consejos

He hecho una pequeña prueba con su problema (no estoy seguro si he entendido bien), y estas propiedades se muestra en el diseñador correctamente, y todas las enumeraciones se muestran de forma adecuada.Si esto no es lo que usted está buscando, por favor, explique usted más.

No consigue colgar en el _Ugly parte arrojados allí.Yo sólo lo utiliza para realizar una prueba rápida.

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

Usted no necesita hacer su enumeraciones global en orden para que sean visibles en el diseñador.

Aclarar por favor:

  1. si usted añadir otro valor a su AutoSizeMode enum, ¿todavía aparece como un valor booleano?
  2. Si (lugar) cambia el nombre de la enumeración, ¿todavía aparece como un valor booleano?

Algunas cosas para intentar (el diseñador de modo en VS2005 que he encontrado para ser un poco escamosa):

  1. Abra su web.config y añadir: batch="false" a su <compilation> de la etiqueta.
  2. Pruebe a establecer valores predeterminados para su enumeraciones:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top