枚举类型的 UserControl 属性在设计器中显示为 bool 或根本不显示
-
09-06-2019 - |
题
我有一个具有多个公共属性的用户控件。这些属性自动显示在 VS2005 设计器的属性窗口中的“Misc”类别下。除了两个枚举属性无法正确显示之外。
第一个使用以下枚举:
public enum VerticalControlAlign
{
Center,
Top,
Bottom
}
这不会出现在设计器中 根本不。
第二个使用这个枚举:
public enum AutoSizeMode
{
None,
KeepInControl
}
这个出现了,但设计者似乎认为这是一个布尔值,只显示 True 和 False。当您使用控件构建项目时,它会说它无法将 bool 类型转换为 AutoSizeMode。
此外,这些枚举是在命名空间中全局声明的,因此它们可以在任何地方访问。
有任何想法吗?
解决方案
对于初学者来说,第二个枚举 AutoSizeMode 在 System.Windows.Forms 中声明。所以这可能会给设计师带来一些问题。
其次,您可能会发现 MSDN 上的以下页面很有用:
其他提示
我对您的问题做了一些测试(我不确定我是否理解正确),这些属性正确地显示在设计器中,并且所有枚举都正确显示。如果这不是您想要的,请进一步解释一下。
不要纠结于其中的 _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;
}
}
您无需将枚举设为全局即可使它们在设计器中可见。
请澄清:
- 如果您向 AutoSizeMode 枚举添加另一个值,它是否仍然显示为布尔值?
- 如果(相反)您更改枚举的名称,它仍然显示为布尔值吗?
一些需要尝试的事情(我发现 VS2005 中的设计器模式有些不稳定):
- 打开你的 web.config 并添加:
batch="false"
给你的<compilation>
标签。 尝试将默认值设置为您的枚举:
public enum VerticalControlAlign { Center = 0, Top = 1, Bottom = 2 }
不隶属于 StackOverflow