枚举类型的 UserControl 属性在设计器中显示为 bool 或根本不显示
Posted
技术标签:
【中文标题】枚举类型的 UserControl 属性在设计器中显示为 bool 或根本不显示【英文标题】:UserControl Property of type Enum displays in designer as bool or not at all 【发布时间】:2010-09-09 00:18:37 【问题描述】:我有一个具有多个公共属性的用户控件。这些属性会自动显示在 VS2005 设计器的属性窗口中的“杂项”类别下。除了两个作为枚举的属性没有正确显示。
第一个使用以下枚举:
public enum VerticalControlAlign
Center,
Top,
Bottom
这根本不会出现在设计器中。
第二个使用这个枚举:
public enum AutoSizeMode
None,
KeepInControl
这个出现了,但设计者似乎认为它是一个布尔值,只显示 True 和 False。当您使用控件构建项目时,它会说它无法将类型 bool 转换为 AutoSizeMode。
此外,这些枚举被声明为全局命名空间,因此它们可以在任何地方访问。
有什么想法吗?
【问题讨论】:
【参考方案1】:我对您的问题进行了一些测试(我不确定我是否理解正确),这些属性正确显示在设计器中,并且所有枚举都正确显示。如果这不是您要查找的内容,请进一步解释自己。
不要挂在里面的 _Ugly 部分。我只是用它来进行快速测试。
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("***.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("***.com")]
[Description("Sets the auto size mode")]
public AutoSizeMode AutoSizeMode_Ugly
get return m_autoSize;
set m_autoSize = value;
private AutoSizeMode m_autoSize;
【讨论】:
【参考方案2】:首先,第二个枚举 AutoSizeMode 在 System.Windows.Forms 中声明。所以这可能会给设计者带来一些问题。
其次,您可能会发现 MSDN 上的以下页面很有用:
http://msdn.microsoft.com/en-us/library/tk67c2t8.aspx
【讨论】:
我遇到了第一个示例中的问题 - 我的枚举根本没有出现。这个答案甚至没有试图解决这个问题。【参考方案3】:您无需将枚举设为全局即可在设计器中显示它们。
请澄清:
-
如果向 AutoSizeMode 枚举添加另一个值,它是否仍显示为布尔值?
如果(相反)您更改了枚举的名称,它是否仍显示为布尔值?
【讨论】:
【参考方案4】:要尝试的一些事情(我发现 VS2005 中的设计器模式有点不稳定):
-
打开您的 web.config 并将:
batch="false"
添加到您的 <compilation>
标记中。
尝试为您的枚举设置默认值:
public enum VerticalControlAlign
Center = 0,
Top = 1,
Bottom = 2
【讨论】:
这是 WinForms 而不是 WebForms以上是关于枚举类型的 UserControl 属性在设计器中显示为 bool 或根本不显示的主要内容,如果未能解决你的问题,请参考以下文章