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

نام تاپیک: کار با Type و PropertyInfo

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

    Question کار با Type و PropertyInfo

    کد زیر رو نوشتم که فکر کنم از قیافش پیداست که داره چیکار می کنه.
    کلاسی دارم که بسته به نوعی که انتخاب میشه یک WEBControl می سازه. بعضی از Property های این نوع ساخته شده در کلاس من موجود هست و می خوام مقدار اون Property رو جایگزین مقدار WEbBontrolی که ساختم بکنم.

    فقط نمیدونم در قسمتی که به رنگ قرمز نشون دادم باید چی بنویسم!!!
    تو قسمت قرمز ظاهرن باید نام Property نوشته بشه ولی از کجا؟!!

    foreach (PropertyInfo ControlInfo in answer.Control.GetType().GetProperties())
    foreach (PropertyInfo AnswerInfo in answer.GetType().GetProperties())
    {
    if ((ControlInfo.PropertyType == AnswerInfo.PropertyType) && (ControlInfo.Name == AnswerInfo.Name))
    ControlInfo.SetValue(answer.Control as object, AnswerInfo.GetValue(null,null), null);
    }

    مثلن اون خط اگر به شکل
    info[5].SetValue(answer.Control as object, TextBoxMode.Password, null);

    نوشته بشه همه چیز درست کار می کنه.

  2. #2
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    پارامتر اول باید برای مشخص کردن نمونه شیئ بکار برده بشه:

    AnswerInfo.GetValue(TextBoxMode,null)

    که اگر نمونه شیئ AnswerInfo در حلقه foreach روی خاصیت Password تنظیم شود، میتوان توسط کد فوق به مقدار خاصیت Password از نمونه شیئ TextBoxMode دسترسی داشت.

  3. #3
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    سلام
    به دلیل فوری بودن موضوع تونستم با کد زیر کارم رو راه بندازم.
    از توجه و راهنمایی شما هم تشکر میکنم.

    foreach (PropertyInfo ControlInfo in answer.Control.GetType().GetProperties())
    foreach (PropertyInfo AnswerInfo in answer.GetType().GetProperties())
    if ((ControlInfo.PropertyType == AnswerInfo.PropertyType) && (ControlInfo.Name == AnswerInfo.Name))
    {
    if (AnswerInfo.GetValue(answer, null) != null)
    ControlInfo.SetValue(answer.Control asobject, AnswerInfo.GetValue(answer, null), null);
    }
    MethodInfo methodInfo = answer.Control.GetType().GetMethod("DataBind");
    if (methodInfo != null)
    methodInfo.Invoke(answer.Control, null);

  4. #4
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    باز دو باره به مشکل بر خورد کردم
    privatevoid SetValue(object Control)
    {
    object objValue = null;
    object Value = null;
    PropertyInfo pInfo = Control.GetType().GetProperty("Items");
    if (pInfo != null)
    {
    Value = pInfo.GetValue(Control, null);
    string[] strValues = objValue.ToString().Split(',');
    ListItemCollection items = ((ListItemCollection)Value);
    foreach (ListItem item in items)
    foreach (string s in strValues)
    if (s == item.Value)
    item.Selected = true;
    pInfo.SetValue(Control, (object)items, null);
    }
    }

    به خط آخر که میرسه Error میده که : Property set method not found.

    چرا؟
    در ضمن pInfo.CanWrite مقدار false بر میگردونه!!!!!

  5. #5
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044

    Unhappy

    وای نتیجه
    pInfo.GetSetMethod()

    null شد!!!
    یعنی هیچ متدی برای Write نداره!!!
    چی کار باید بکنم؟!!

  6. #6
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    لطفن راهنمایی کنید.
    اگر روش کار من تو کد آخری که فرستادم درست باشه و چیزی که فهمیدم هم درست این یعنی این که هرچه ریسیده بودم پنبه شد!!!
    امیدوارم که اشتباه از من باشه.

  7. #7
    کاربر دائمی آواتار سار
    تاریخ عضویت
    اسفند 1382
    محل زندگی
    تورین-ایتالیا
    پست
    1,044
    با حذف کد :
    pInfo.SetValue(Control, (object)items, null);

    همه چیز درست کار کرد!!
    ببینم واقن نیازی به SetValue نبود؟
    چرا؟
    کسی میتونه توضیحی به من بده؟

  8. #8
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    چون خاصیت Items ، بلوک set رو پیاده سازی نکرده است و بصورت فقط خواندنی عمل میکنه.

    در ضمن pInfo.CanWrite مقدار false بر میگردونه!!!!!
    یعنی هیچ متدی برای Write نداره!!!
    همانطور است که خودتون متوجه شده اید.

تاپیک های مشابه

  1. اضافه کردن یک Type جدید به Type Library یا OLE Automation Section
    نوشته شده توسط Hadizadeh در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 6
    آخرین پست: پنج شنبه 04 مرداد 1386, 09:08 صبح
  2. Object type cannot be converted to target type.
    نوشته شده توسط Beyondsoft در بخش VB.NET
    پاسخ: 1
    آخرین پست: سه شنبه 23 خرداد 1385, 10:08 صبح
  3. type any
    نوشته شده توسط mohsen_sh در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: پنج شنبه 04 خرداد 1385, 22:59 عصر
  4. If type of در ویژوال بیسیک 6 چیست ؟
    نوشته شده توسط mkbo_webmaster در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: جمعه 15 اردیبهشت 1385, 22:42 عصر

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

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