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

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

UserControl Property of type Enum displays in designer as bool or not at all

我有一个具有几个公共属性的用户控件。 这些属性自动显示在VS2005设计器的"杂项"类别下的属性窗口中。 除了两个枚举属性外,其他属性均无法正确显示。

首先使用以下枚举:

1
2
3
4
5
6
public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

这一点根本没有出现在设计器中。

第二个使用此枚举:

1
2
3
4
5
public enum AutoSizeMode
{
    None,
    KeepInControl
}

这个显示出来了,但是设计师似乎认为这是一个布尔值,并且只显示True和False。 当您使用控件构建项目时,它将说它无法将bool类型转换为AutoSizeMode。

而且,这些枚举在名称空间中被声明为全局名称,因此可以在任何地方访问。

有任何想法吗?


我对您的问题进行了一些测试(不确定我是否理解正确),这些属性在设计器中正确显示,并且所有枚举均正确显示。如果这不是您想要的,请进一步说明。

不要挂在那里的_Ugly部分上。我只是用它来进行快速测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;    
    }
}

您无需将枚举全局化即可在设计器中可见。

请澄清:

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

  • 可以尝试一些操作(我发现VS2005中的设计器模式有些不稳定):

  • 打开您的web.config并在标记中添加:batch="false"
  • 尝试将默认值设置为您的枚举:

    1
    2
    3
    4
    5
    6
    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }

  • 对于初学者,第二个枚举AutoSizeMode在System.Windows.Forms中声明。因此,这可能会导致设计人员遇到一些问题。

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

    http://msdn.microsoft.com/zh-CN/library/tk67c2t8.aspx


    推荐阅读