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

نام تاپیک: چرا رویدادی که با پارامترهای Generic ساخته میشه در قسمت رویدادها نمیاد؟

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    آستارا-تهران
    پست
    357

    چرا رویدادی که با پارامترهای Generic ساخته میشه در قسمت رویدادها نمیاد؟

    با سلام
    من یک کلاس WaterMarkBox نوشتم که از از TextBox به ارث برده شده . من رویدادم رو بدین صورت تعریف کردم
            [Browsable(true)]
    public event EventHandler<ValueChangedEventArgs<string>> ValueTextChangedEvent;
    اینم کلاس ValueChangedEventArgs
        public class ValueChangedEventArgs<T>:EventArgs
    {
    public ValueChangedEventArgs(){ }
    public bool Cancel { get; set; }
    public T OldValue { get; set; }
    }
    حالا این رویداد در قسمت design نمیاد ولی در قسمت کد وجود داره و قابل استفاده است
    حتی من در بالای کلاس این رویداد رو به عنوان DefaultEvent تعریف کردم بدین صورت:
    [DefaultEvent("ValueTextChangedEvent")]
    class WaterMarkBox : TextBox
    {
    حالا وقتی موقع design روی این کنترل دبل کلیک می کنم رویداد مورد نظر رو تولید می کنه ولی به صورت اشتباه:
            private void waterMarkBox2_ValueTextChangedEvent(object sender)
    {
    }
    که درستش این میشه:
            void waterMarkBox2_ValueTextChangedEvent(object sender, mohsen.ValueChangedEventArgs<string> e)
    {
    }
    از دوستان کسی هست که بنده رو راهنمایی کنه؟
    آخرین ویرایش به وسیله mohsen_csharp : پنج شنبه 27 فروردین 1388 در 12:23 عصر

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    تهران
    پست
    123

    نقل قول: چرا رویدادی که با پارامترهای Generic ساخته میشه در قسمت رویدادها نمیاد؟

    ایراد جالبیه! مدتی هم با کد کلنجار رفتم، به نظر کاملا درست می آید. احتمال دارد bug مربوط به visual studio باشد.

    در هر حال اگر EventHandler را به صورت زیر تعریف کنید مشکل نمایش در رویدادها حل خواهد شد اما ایجاد اتوماتیک متد برای handler کماکان مشکل دارد:


    [Serializable]
    public delegate void ValueChangedEventHandler<T>(object sender, ValueChangedEventArgs<T> e) where T:class;


    تعریف event:

    [Browsable(true)]
    public event ValueChangedEventHandler<string> ValueTextChangedEvent;


    به نظر می رسد محیط designer امکان Load کردن delegate شامل کد generic را پیدا نمی کند، از آنجا که به متد generic می توان همه انواع object ها را ارسال کرد شاید محیط designer برای جلوگیری از خطا event را اتوماتیک ایجاد نمی کند.
    من پارامتر generic را به ISerializable، IConvertible و class فیلتر کردم اما نتیجه نداشت!

    کسی تجربه ای دارد؟

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

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