تغییر عناصر یک enum در پنجره Properties
سلام
توی یک یوزر کنترل میخوام یک پراپرتی تعریف کنم که نوعش از یک enum باشه که فرضا مقدارهایی بصورت زیر داره
enum MyEnum
{
Black2008,
Blue2009,
Red2010
}
تا اینجا که مشکلی نیست. مشکلم اینه که میخوام توی پنجره Properties این مقدارها بصورت زیر نمایش داده بشن
2008 - Black
2009 - Blue
2010 - Red
سوال اینجاست که چطور این کار رو انجام بدم؟ و یا بصورت کلی چه راههایی وجود داره که بشه یک پراپرتی تعریف کرد که کاربر فقط بتونه از بین داده های بالا انتخاب کنه؟
پیشاپیش ممنونم.
نقل قول: تغییر عناصر یک enum در پنجره Properties
فکر کنم منظورتون اینه:
public enum MyPropertyType
{
myValue1,
myValue2,
myValue3
}
private MyPropertyType _MyProperty;
public MyPropertyType MyProperty
{
get { return _MyProperty; }
set { _MyProperty = value; }
}
نقل قول: تغییر عناصر یک enum در پنجره Properties
دوست عزیز فکر کنم توضیحاتم کامل باشه ، مشکل من با تعریف پراپرتی نیست مشکلم اینه که میخوام این پراپرتی توی پنجره Properties عناصرش عوض بشه. مثلا برای مثال شما توی پنجره Properties پراپرتی MyProperty با داده های زیر نمایش داده بشه و فقط از بین این داده ها بشه انتخاب کرد.
myValue - 1
myValue - 2
myValue - 3
این داده ها فقط توی پنجره Properties به این صورت هستند و توی برنامه به همون صورت داده های enum نمایش داده میشن.
این موضوع رو توی بعضی از کامپوننتها دیدم ولی نمیدونم چطور این کار رو انجام بدم. یک مقدار با Attributeها هم ور رفتم ولی به جایی نرسیدم.:متفکر:
1 ضمیمه
نقل قول: تغییر عناصر یک enum در پنجره Properties
دوست عزیز
این کدی که من نوشتم دقیقا همین کارو میکنه
https://barnamenevis.org/images/misc/pencil.png
نقل قول: تغییر عناصر یک enum در پنجره Properties
در وافع باید از نوع enum یک شی تعریف کرد و property مورد نظر رو از نوع شی اول تعریف کرد تا اتفاق مورد نظر شما حاصل بشه.
نقل قول: تغییر عناصر یک 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" شناخته میشه.
حالا من چطور برای پراپرتیهای خودم هم این قابلیت رو استفاده کنم؟
نقل قول: تغییر عناصر یک enum در پنجره Properties
دوستان کسی نیست کمکم کنه؟
نقل قول: تغییر عناصر یک 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; }