يتم عرض خاصية UserControl من النوع Enum في المصمم على أنها منطقية أو لا يتم عرضها على الإطلاق

StackOverflow https://stackoverflow.com/questions/64139

سؤال

لدي عنصر تحكم مستخدم يحتوي على العديد من الخصائص العامة.تظهر هذه الخصائص تلقائيًا في نافذة الخصائص الخاصة بمصمم VS2005 ضمن فئة "متفرقات".باستثناء اثنين من الخصائص التي تعد تعدادات لا تظهر بشكل صحيح.

الأول يستخدم التعداد التالي:

public enum VerticalControlAlign
{
    Center,
    Top,
    Bottom
}

وهذا لا يظهر في المصمم على الاطلاق.

والثاني يستخدم هذا التعداد:

public enum AutoSizeMode
{
    None,
    KeepInControl
}

يظهر هذا، ولكن يبدو أن المصمم يعتقد أنه منطقي ويظهر فقط الصواب والخطأ.وعندما تقوم بإنشاء مشروع باستخدام عناصر التحكم، سيقول أنه لا يمكن تحويل النوع bool إلى AutoSizeMode.

أيضًا، يتم الإعلان عن هذه التعدادات بشكل عالمي في مساحة الاسم، بحيث يمكن الوصول إليها في كل مكان.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

بالنسبة للمبتدئين، تم الإعلان عن التعداد الثاني، AutoSizeMode في System.Windows.Forms.لذلك قد يسبب ذلك للمصمم بعض المشكلات.

ثانيًا، قد تجد الصفحة التالية على MSDN مفيدة:

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

نصائح أخرى

لقد أجريت اختبارًا صغيرًا لمشكلتك (لست متأكدًا مما إذا كنت قد فهمتها بشكل صحيح)، وتظهر هذه الخصائص في المصمم بشكل صحيح، وتظهر جميع التعدادات بشكل مناسب.إذا لم يكن هذا هو ما تبحث عنه، فيرجى توضيح نفسك أكثر.

لا تتوقف عن الحديث عن الجزء القبيح الموجود هناك.لقد استخدمته فقط لاختبار سريع.

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. إذا أضفت قيمة أخرى إلى تعداد AutoSizeMode الخاص بك، فهل ستظل تظهر كقيمة منطقية؟
  2. إذا قمت (بدلاً من ذلك) بتغيير اسم التعداد، فهل سيظل يظهر كقيمة منطقية؟

بعض الأشياء التي يجب تجربتها (لقد وجدت أن وضع المصمم في VS2005 غير مستقر إلى حد ما):

  1. افتح web.config وأضف: batch="false" لك <compilation> بطاقة شعار.
  2. حاول تعيين الإعدادات الافتراضية للتعدادات الخاصة بك:

    public enum VerticalControlAlign
    {
        Center = 0,
        Top = 1,
        Bottom = 2
    }
    
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top