C# Enum类型的UserControl属性在设计器中显示为bool或根本不显示

C# Enum类型的UserControl属性在设计器中显示为bool或根本不显示,c#,visual-studio,enums,user-controls,C#,Visual Studio,Enums,User Controls,我有一个usercontrol,它有几个公共属性。这些属性自动显示在VS2005设计器的“属性”窗口中的“杂项”类别下。除了两个属于枚举的属性没有正确显示之外 上的第一个使用以下枚举: public enum VerticalControlAlign { Center, Top, Bottom } 这在设计器中根本没有显示 第二个使用此枚举: public enum AutoSizeMode { None, KeepInControl } 这一个出现了

我有一个usercontrol,它有几个公共属性。这些属性自动显示在VS2005设计器的“属性”窗口中的“杂项”类别下。除了两个属于枚举的属性没有正确显示之外

上的第一个使用以下枚举:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}
这在设计器中根本没有显示

第二个使用此枚举:

public enum AutoSizeMode
{
    None,
    KeepInControl
}
这一个出现了,但设计师似乎认为这是一个布尔,只显示真实和错误。当您使用控件构建项目时,它会说它无法将类型bool转换为AutoSizeMode

此外,这些枚举被全局地声明到名称空间,因此它们在任何地方都可以访问


有什么想法吗?

对于初学者,第二个枚举AutoSizeMode在System.Windows.Forms中声明。这可能会给设计师带来一些问题

其次,您可能会发现MSDN上的以下页面很有用:

有些东西需要尝试(我发现VS2005中的设计师模式有些古怪):

  • 打开web.config并将:
    batch=“false”
    添加到
    标记中
  • 尝试将默认值设置为枚举:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    

  • 为了使枚举在设计器中可见,无需将其设为全局枚举

    请澄清:

  • 如果向AutoSizeMode枚举添加另一个值,它是否仍显示为布尔值
  • 如果(相反)更改了enum的名称,它是否仍然显示为布尔值

  • 我对您的问题做了一个小测试(我不确定是否理解正确),这些属性正确地显示在设计器中,并且所有枚举都正确地显示。如果这不是你想要的,那么请进一步解释你自己

    不要挂断扔进去的丑陋部分。我只是用它做了个快速测试

    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;    
        }
    }
    
    使用System.ComponentModel;
    使用System.Windows.Forms;
    命名空间示例应用程序
    {
    公共部分类CustomUserControl:UserControl
    {
    公共CustomUserControl()
    {
    初始化组件();
    }
    /// 
    ///我们将AutoSizeMode隐藏在UserControl中。
    /// 
    公共新枚举自动共享模式{None,KeepInControl}
    公共枚举垂直控制对齐{中心、顶部、底部}
    /// 
    ///请注意,您不能拥有属性
    ///如果是,则称为VerticalControlAlign
    ///已在范围中定义。
    /// 
    [DisplayName(“VerticalControlAlign”)]
    [类别(“stackoverflow.com”)]
    [说明(“设置垂直控制对齐”)]
    公共垂直控制对齐垂直控制对齐\u
    {
    获取{return m_align;}
    设置{m_align=value;}
    }
    专用垂直控制对齐m_对齐;
    /// 
    ///请注意,您不能拥有属性
    ///如果是,则称为AutoSizeMode
    ///已在范围中定义。
    /// 
    [DisplayName(“AutoSizeMode”)]
    [类别(“stackoverflow.com”)]
    [说明(“设置自动大小模式”)]
    公共AutoSizeMode AutoSizeMode_
    {
    获取{return m_autoSize;}
    设置{m_autoSize=value;}
    }
    私有AutoSizeMode m_autoSize;
    }
    }
    
    这是WinForms而不是WebForms我遇到了第一个示例中的问题-我的枚举根本不显示。这个答案甚至没有试图解决这个问题。