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

时间:2008-09-15 15:50:46

标签: c# visual-studio enums user-controls

我有一个具有多个公共属性的usercontrol。这些属性会自动显示在VS2005设计器的属性窗口中的“Misc”类别下。除了枚举中的两个属性没有正确显示。

第一个使用以下枚举:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

这根本不会出现在设计师中。

第二个使用此枚举:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

这个出现了,但设计师似乎认为它是一个布尔,只显示真与假。当您使用控件构建项目时,它会说它无法将类型bool转换为AutoSizeMode。

此外,这些枚举以全局方式声明到命名空间,因此可以随处访问它们。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

我对你的问题进行了一些测试(我不确定我是否正确理解它),这些属性在设计器中正确显示,并且所有枚举都显示得恰当。如果这不是你想要的,那么请进一步解释自己。

不要挂在那里扔的_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;    
    }
}

答案 1 :(得分:0)

对于初学者,第二个枚举,AutoSizeMode在System.Windows.Forms中声明。这可能会给设计师带来一些问题。

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

http://msdn.microsoft.com/en-us/library/tk67c2t8.aspx

答案 2 :(得分:0)

要尝试的一些事情(VS2005中的设计师模式,我发现有些不稳定):

  1. 打开您的web.config并将batch="false"添加到您的<compilation>代码。
  2. 尝试为您的枚举设置默认值:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    

答案 3 :(得分:0)

您无需将枚举设为全局,以便在设计器中显示它们。

请澄清:

  1. 如果你在AutoSizeMode枚举中添加另一个值,它是否仍然显示为布尔值?
  2. 如果(改为)更改枚举名称,它是否仍然显示为布尔值?