枚举类型的UserControl属性在设计器中显示为bool或者根本不显示
时间:2020-03-05 18:53:47 来源:igfitidea点击:
我有一个具有几个公共属性的用户控件。这些属性自动显示在VS2005设计器的"杂项"类别下的属性窗口中。除了两个枚举属性外,其他属性均无法正确显示。
首先使用以下枚举:
public enum VerticalControlAlign { Center, Top, Bottom }
这一点根本没有出现在设计器中。
第二个使用此枚举:
public enum AutoSizeMode { None, KeepInControl }
这个显示出来了,但是设计师似乎认为这是一个布尔值,并且只显示True和False。当我们使用控件构建项目时,它将说它无法将bool类型转换为AutoSizeMode。
同样,这些枚举在名称空间中被声明为全局名称,因此可以在任何地方访问。
有任何想法吗?
解决方案
回答
对于初学者,第二个枚举AutoSizeMode在System.Windows.Forms中声明。因此,这可能会导致设计人员遇到一些问题。
其次,我们可能会发现MSDN上的以下页面很有用:
http://msdn.microsoft.com/zh-CN/library/tk67c2t8.aspx
回答
可以尝试一些操作(我发现VS2005中的设计器模式有些不稳定):
- 打开web.config并在<compilation>标签中添加
batch =" false"
。 - 尝试将默认值设置为枚举:
public enum VerticalControlAlign { Center = 0, Top = 1, Bottom = 2 }
回答
我们无需将枚举全局化即可在设计器中可见它们。
请澄清:
- 如果将另一个值添加到AutoSizeMode枚举,它是否仍显示为布尔值?
- 如果(改为)我们更改了enum的名称,它仍然显示为布尔值吗?
回答
我对问题进行了一些测试(不确定我是否理解正确),这些属性在设计器中正确显示,并且所有枚举均正确显示。如果这不是我们想要的,请进一步说明自己。
不要挂在丢掉的_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("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; } }