نمایش نتایج 1 تا 8 از 8

نام تاپیک: تغییر عناصر یک enum در پنجره Properties

  1. #1

    تغییر عناصر یک enum در پنجره Properties

    سلام
    توی یک یوزر کنترل میخوام یک پراپرتی تعریف کنم که نوعش از یک enum باشه که فرضا مقدارهایی بصورت زیر داره
     
    enum MyEnum
    {
    Black2008,
    Blue2009,
    Red2010
    }

    تا اینجا که مشکلی نیست. مشکلم اینه که میخوام توی پنجره Properties این مقدارها بصورت زیر نمایش داده بشن
     
    2008 - Black
    2009 - Blue
    2010 - Red

    سوال اینجاست که چطور این کار رو انجام بدم؟ و یا بصورت کلی چه راههایی وجود داره که بشه یک پراپرتی تعریف کرد که کاربر فقط بتونه از بین داده های بالا انتخاب کنه؟
    پیشاپیش ممنونم.

  2. #2
    کاربر دائمی آواتار hadi-z
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    سن
    38
    پست
    421

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    فکر کنم منظورتون اینه:

    public enum MyPropertyType
    {
    myValue1,
    myValue2,
    myValue3
    }

    private MyPropertyType _MyProperty;
    public MyPropertyType MyProperty
    {
    get { return _MyProperty; }
    set { _MyProperty = value; }
    }

  3. #3

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    دوست عزیز فکر کنم توضیحاتم کامل باشه ، مشکل من با تعریف پراپرتی نیست مشکلم اینه که میخوام این پراپرتی توی پنجره Properties عناصرش عوض بشه. مثلا برای مثال شما توی پنجره Properties پراپرتی MyProperty با داده های زیر نمایش داده بشه و فقط از بین این داده ها بشه انتخاب کرد.
    myValue - 1
    myValue - 2
    myValue - 3

    این داده ها فقط توی پنجره Properties به این صورت هستند و توی برنامه به همون صورت داده های enum نمایش داده میشن.
    این موضوع رو توی بعضی از کامپوننتها دیدم ولی نمیدونم چطور این کار رو انجام بدم. یک مقدار با Attributeها هم ور رفتم ولی به جایی نرسیدم.

  4. #4
    کاربر دائمی آواتار hadi-z
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    سن
    38
    پست
    421

    Talking نقل قول: تغییر عناصر یک enum در پنجره Properties

    دوست عزیز
    این کدی که من نوشتم دقیقا همین کارو میکنه


  5. #5
    کاربر دائمی آواتار hadi-z
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    سن
    38
    پست
    421

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    در وافع باید از نوع enum یک شی تعریف کرد و property مورد نظر رو از نوع شی اول تعریف کرد تا اتفاق مورد نظر شما حاصل بشه.

  6. #6

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    دوست عزیز خواهشا یکبار دیگه سوال رو بخونید.
    من میخوام توی پنجره Properties بجای "myValue1" مقدار "my Value - 1" رو نمایش بده.
    همونطور که میدونید توی تعریف مقدارهای یک enum نمیشه مقداری تعریف کرد که بین کلمات اون فاصله باشه و باید کلمات به هم چسبیده باشند. من نیاز دارم این مقدارها توی پنجره Properties بصورت کلمات جدا از هم نمایش داده بشه.
    برای مثال کامپوننتها شرکت ComponentFactory پراپرتیی دارند با نام PaletteMode ، که این پراپرتی توی پنجره Properties بصورت کلمات جدا از هم نمایش داده میشه ولی توی محیط کد نویسی بصورت کلمات سرهم.
    و یا در SQL Server و برنامه Generate Script ، در مرحله Options تنظیماتی انجام میشه ، یکیشون ورژن اسکریپت رو تعیین میکنه ، مقدارهایی که کاربر انتخاب میکنه "SQL Server 2000" و "SQL Server 2005" است ولی این ورژنها در اصل با "version80" و "version90" شناخته میشه.
    حالا من چطور برای پراپرتیهای خودم هم این قابلیت رو استفاده کنم؟

  7. #7

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    دوستان کسی نیست کمکم کنه؟

  8. #8

    نقل قول: تغییر عناصر یک enum در پنجره Properties

    ابتدا کلاسی بصورت زیر تعریف کنید
    using System.Reflection;
    using System.Globalization;



    class MyConverter : EnumConverter
    {
    private Type _enumType;
    public MyConverter(Type type) : base(type)
    {
    _enumType = type;
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destType)
    {
    FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, value));
    DescriptionAttribute dna = (DescriptionAttribute)Attribute.GetCustomAttribute (
    fi, typeof(DescriptionAttribute));

    if (dna != null)
    return dna.Description;
    else
    return value.ToString();
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
    foreach (FieldInfo fi in _enumType.GetFields())
    {
    DescriptionAttribute dna =
    (DescriptionAttribute)Attribute.GetCustomAttribute (
    fi, typeof(DescriptionAttribute));

    if ((dna != null) && ((string)value == dna.Description))
    return Enum.Parse(_enumType, fi.Name);
    }
    return Enum.Parse(_enumType, (string)value);
    }
    }
    بعد enum و پراپرتی مورد نظرتون رو بصورت زیر تغییر بدید.
    public enum MyEnum
    {
    [Description("2008 - Black")]
    Black2008,
    [Description("2009 - Blue")]
    Blue2009
    }
    [TypeConverter(typeof(MyConverter))]
    public MyEnum MyProp{ get; set; }

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •