我有一个具有几个公共属性的用户控件。 这些属性自动显示在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