UserControl La propriété de type Enum s'affiche dans le concepteur sous forme booléenne ou pas du tout.

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

Question

J'ai un contrôle utilisateur qui possède plusieurs propriétés publiques. Ces propriétés apparaissent automatiquement dans la fenêtre des propriétés du concepteur VS2005 sous & "Misc &"; Catégorie. Sauf que deux des propriétés qui sont des énumérations ne s'affichent pas correctement.

Le premier utilise l’énumération suivante:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

Cela n'apparaît pas du tout dans le concepteur .

Le second utilise cet enum:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

Celui-ci apparaît, mais le concepteur semble penser que c'est un bool et ne montre que True et False. Et lorsque vous construisez un projet à l'aide des contrôles, il indique qu'il ne peut pas convertir le type bool en AutoSizeMode.

De plus, ces énumérations sont déclarées globalement dans l'espace de noms, de sorte qu'elles sont accessibles partout.

Des idées?

Était-ce utile?

La solution

Pour commencer, le deuxième enum, AutoSizeMode est déclaré dans System.Windows.Forms. Cela pourrait donc poser quelques problèmes au concepteur.

Deuxièmement, la page suivante sur MSDN pourrait vous être utile:

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

Autres conseils

J'ai fait un petit test avec votre problème (je ne suis pas sûr de l'avoir bien compris), et ces propriétés s'affichent correctement dans le concepteur et toutes les énumérations sont affichées correctement. Si ce n'est pas ce que vous recherchez, expliquez-vous davantage.

Ne vous attachez pas à la partie laide qui y est jetée. Je viens de l'utiliser pour un test rapide.

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

Vous n'avez pas besoin de rendre vos énumérations globales pour qu'elles soient visibles dans le concepteur.

Clarifiez s'il vous plaît:

  1. si vous ajoutez une autre valeur à votre énumération AutoSizeMode, apparaît-il toujours sous la forme d'un booléen?
  2. Si vous modifiez le nom de l'énumération à la place, apparaît-il toujours sous la forme d'un booléen?

Certaines choses à essayer (le mode designer dans VS2005 que j'ai trouvé un peu floconneux):

  1. Ouvrez votre fichier web.config et ajoutez: batch="false" à votre <compilation> balise.
  2. Essayez de définir les valeurs par défaut suivantes:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top