1

いくつかのパブリック プロパティを持つユーザー コントロールがあります。これらのプロパティは、VS2005 デザイナのプロパティ ウィンドウの [その他] カテゴリに自動的に表示されます。列挙型である 2 つのプロパティを除いて、正しく表示されません。

最初に、次の列挙型を使用します。

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

これはデザイナーにはまったく表示されません。

2 つ目は、次の列挙型を使用します。

public enum AutoSizeMode
{
    None,
    KeepInControl
}

これが表示されますが、デザイナーはそれがブール値であると考えているようで、True と False しか表示されません。また、コントロールを使用してプロジェクトをビルドすると、bool 型を AutoSizeMode に変換できないと表示されます。

また、これらの列挙型は名前空間に対してグローバルに宣言されるため、どこからでもアクセスできます。

何か案は?

4

4 に答える 4

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;    
    }
}
于 2008-09-15T16:14:42.340 に答える
0

試してみるべきいくつかのこと(VS2005のデザイナーモードはやや不安定であることがわかりました):

  1. web.config を開き、次をタグに追加batch="false"します。<compilation>
  2. 列挙型にデフォルトを設定してみてください:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
于 2008-09-15T15:58:08.137 に答える
0

列挙型をデザイナーで表示するために列挙型をグローバルにする必要はありません。

明確にしてください:

  1. AutoSizeMode 列挙型に別の値を追加しても、ブール値として表示されますか?
  2. (代わりに) enum の名前を変更しても、ブール値として表示されますか?
于 2008-09-15T16:01:03.713 に答える
0

まず、2 番目の列挙型である AutoSizeMode が System.Windows.Forms で宣言されています。そのため、設計者に問題が発生する可能性があります。

次に、MSDN の次のページが役立つ場合があります。

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

于 2008-09-15T15:56:04.990 に答える