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

نام تاپیک: ايراد در اجراي تابع

  1. #1
    کاربر تازه وارد آواتار Qermezkon
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    اهواز
    پست
    77

    ايراد در اجراي تابع

    ايراد تابع زير چي مي تونه باشه.
    با VS 2008 مشكلي نداره اما در VS 2010 و NET Frame Work 4.0 با خطا مواجه مي شه
     CultureInfo fa = (from p in cultures
    where p.LCID == 1065
    select p).FirstOrDefault();
    PersianCultureHelper.SetPersianOptions(fa);
    //***********************************************
    namespace PersianDeveloper
    {
    using System;
    using System.Globalization;
    using System.Reflection;

    public static class PersianCultureHelper
    {
    private static PropertyInfo calendarID = typeof(Calendar).GetProperty("ID", BindingFlags.NonPublic | BindingFlags.Instance);
    private static FieldInfo cultureInfoCalendar = typeof(CultureInfo).GetField("calendar", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    private static FieldInfo cultureInfoReadOnly = typeof(CultureInfo).GetField("m_isReadOnly", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    private static MethodInfo cultureTableRecordUseCurrentCalendar = typeof(DateTimeFormatInfo).Assembly.GetType("Syste m.Globalization.CultureTableRecord").GetMethod("Us eCurrentCalendar", BindingFlags.NonPublic | BindingFlags.Instance);
    private static FieldInfo dateTimeFormatInfoCalendar = typeof(DateTimeFormatInfo).GetField("calendar", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    private static FieldInfo dateTimeFormatInfoCultureTableRecord = typeof(DateTimeFormatInfo).GetField("m_cultureTabl eRecord", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    private static FieldInfo dateTimeFormatInfoReadOnly = typeof(DateTimeFormatInfo).GetField("m_isReadOnly" , BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    private static FieldInfo numberFormatInfoReadOnly = typeof(NumberFormatInfo).GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

    public static void InitPersianDateTimeFormat(DateTimeFormatInfo dateTimeFormat)
    {
    PersianCalendar calendar = new PersianCalendar();
    bool flag = (bool) dateTimeFormatInfoReadOnly.GetValue(dateTimeFormat );
    if (flag)
    {
    dateTimeFormatInfoReadOnly.SetValue(dateTimeFormat , false);
    }
    dateTimeFormatInfoCalendar.SetValue(dateTimeFormat , calendar);
    object obj2 = dateTimeFormatInfoCultureTableRecord.GetValue(date TimeFormat);
    cultureTableRecordUseCurrentCalendar.Invoke(obj2, new object[] { calendarID.GetValue(calendar, null) });
    dateTimeFormat.AbbreviatedDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
    dateTimeFormat.ShortestDayNames = new string[] { "ی", "د", "س", "چ", "پ", "ج", "ش" };
    dateTimeFormat.DayNames = new string[] { "يكشنبه", "دوشنبه", "ﺳﻪشنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
    dateTimeFormat.AbbreviatedMonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
    dateTimeFormat.MonthNames = new string[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند", "" };
    dateTimeFormat.AMDesignator = "ق.ظ";
    dateTimeFormat.PMDesignator = "ب.ظ";
    dateTimeFormat.FirstDayOfWeek = DayOfWeek.Saturday;
    dateTimeFormat.FullDateTimePattern = "yyyy MMMM dddd, dd HH:mm:ss";
    dateTimeFormat.LongDatePattern = "yyyy MMMM dddd, dd";
    dateTimeFormat.ShortDatePattern = "yyyy/MM/dd";
    if (flag)
    {
    dateTimeFormatInfoReadOnly.SetValue(dateTimeFormat , true);
    }
    }

    public static void InitPersianNumberFormat(CultureInfo info)
    {
    InitPersianNumberFormat(info.NumberFormat);
    }

    public static void InitPersianNumberFormat(NumberFormatInfo info)
    {
    bool flag = (bool) numberFormatInfoReadOnly.GetValue(info);
    if (flag)
    {
    numberFormatInfoReadOnly.SetValue(info, false);
    }
    info.NativeDigits = new string[] { "٠", "١", "٢", "٣", "٤", "٥", "٦", "٧", "٨", "٩" };
    if (flag)
    {
    numberFormatInfoReadOnly.SetValue(info, true);
    }
    }

    public static void SetPersianCalendar(CultureInfo culture, DateTimeFormatInfo dateTimeFormat)
    {
    PersianCalendar calendar = new PersianCalendar();
    bool flag = (bool) cultureInfoReadOnly.GetValue(culture);
    if (flag)
    {
    cultureInfoReadOnly.SetValue(culture, false);
    }
    culture.DateTimeFormat = dateTimeFormat;
    InitPersianDateTimeFormat(dateTimeFormat);
    cultureInfoCalendar.SetValue(culture, calendar);
    InitPersianNumberFormat(culture);
    if (flag)
    {
    cultureInfoReadOnly.SetValue(culture, true);
    }
    }

    public static void SetPersianOptions(CultureInfo culture)
    {
    SetPersianCalendar(culture, culture.DateTimeFormat);
    }
    }
    }


  2. #2

    نقل قول: ايراد در اجراي تابع

    سلام دوست عزیز
    علت این خطا این است که dateTimeFormatInfoCultureTableRecord در دات نت 4 null می باشد.
    راه حل اینجاست که بدون استفاده از این تابع هم کد بدرستی کار خواهد کرد.


    CultureInfo culture = new CultureInfo("fa-IR");
    DateTimeFormatInfo info = culture.DateTimeFormat;
    info.AbbreviatedDayNames = new String[] { "ى", "د", "س", "چ", "پ", "ج", "ش" };
    info.DayNames = new String[] { "يکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه" };
    info.AbbreviatedMonthNames = new String[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", "" };
    info.MonthNames = new String[] { "فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", "" };
    info.AMDesignator = "ق.ظ";
    info.PMDesignator = "ب.ظ";
    info.ShortDatePattern = "yyyy/MM/dd";
    info.FirstDayOfWeek = DayOfWeek.Saturday;
    culture.DateTimeFormat = info;
    culture.DateTimeFormat = info;
    PersianCalendar PersianCal = new PersianCalendar();
    typeof(DateTimeFormatInfo).GetField("calendar", (BindingFlags.NonPublic | (BindingFlags.Public | BindingFlags.Instance))).SetValue(info, PersianCal);
    typeof(CultureInfo).GetField("calendar", (BindingFlags.NonPublic | (BindingFlags.Public | BindingFlags.Instance))).SetValue(culture, PersianCal);




    این متد کار شما را انجام می دهد
    موفق باشید

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

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