UserControl Proprietà di tipo Enum visualizza nella finestra di progettazione, come bool o non a tutti

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

Domanda

Ho un usercontrol che ha diverse proprietà pubbliche.Queste proprietà vengono visualizzate automaticamente nella finestra proprietà del VS2005 designer sotto "Varie" di categoria.Ad eccezione di due delle proprietà che sono enumerazioni non vengono visualizzati correttamente.

Il primo utilizza i seguenti enum:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

Questo non viene visualizzato nella finestra di progettazione a tutti.

Il secondo utilizza questo enum:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

Questo si presenta, ma il designer sembra pensare è un bool e mostra solo il Vero e il Falso.E quando si genera un progetto utilizzando i controlli si dirà che non può convertire il tipo bool AutoSizeMode.

Inoltre, queste enumerazioni sono dichiarati globably per lo spazio dei nomi, in modo che siano accessibili ovunque.

Tutte le idee?

È stato utile?

Soluzione

Per cominciare, il secondo enum, AutoSizeMode è dichiarato nel Sistema.Windows.Le forme.In modo che potrebbe causare il designer di alcuni problemi.

In secondo luogo, si potrebbe trovare alla seguente pagina su MSDN utile:

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

Altri suggerimenti

Ho fatto un piccolo test con il tuo problema (non so se ho capito bene), e queste proprietà si presenta in design correttamente, e tutte le enumerazioni sono indicati in modo appropriato.Se questo non è ciò che stai cercando, quindi si prega di spiegare ulteriormente.

Non ottenere appendere sul _Ugly parte gettato in là.Ho usato solo per una prova veloce.

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

Non è necessario per rendere il vostro enumerazioni globale in modo per loro di essere visibile nella finestra di progettazione.

Si prega di chiarire:

  1. se si aggiunge un altro valore per il vostro AutoSizeMode enum, ha ancora apparire come un booleano?
  2. Se (invece) si modifica il nome di enum, ha ancora apparire come un booleano?

Alcune cose da provare (modalità designer in VS2005 che ho trovato per essere un po ' traballante):

  1. Aprire il web.config e aggiungere: batch="false" per il vostro <compilation> tag.
  2. Provare a impostare valori predefiniti per il tuo enumerazioni:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top