کنترل تاریخ با پشتیبانی تقویم شمسی برای Windows Forms

مقدمه

یکی از مشکلاتی که توسعه دهنده‌های ایرانی باهاش مواجه هستند، تقویم شمسی هست. این مطلب در مورد یک کنترل انتخاب تاریخ و زمان Open-Source با پشتیبانی از تقویم شمسی در محیط Windows Forms در تکنولوژی .NET Framework هست.

تقویم شمسی و .NET

خوشبختانه مایکروسافت در نسخه‌های اولیه NET.، تقویم شمسی رو پشتیبانی کرده و کلاس PersianCalendar رو ارائه داده. با استفاده از این کلاس میشه محاسبات مربوط به تبدیل تاریخ میلادی به شمسی و برعکس رو به خوبی انجام داد. ولی مشکلی که وجود داره این هست که ویندوزهای قبل از ویندوز 10، از تقویم شمسی پشتیبانی نمی‌کنن که این موضوع، با توجه به یکپارچه بودن اغلب محصولات مایکروسافت از جمله .NET Framework با ویندوز، خیلی از مشکلات رو همچنان حل نشده گذاشته. یکی از این مشکلات در .NET Framework، عدم پشتیبانی کنترل مربوط به نمایش و انتخاب تاریخ و زمان، یعنی DateTimePicker هست.
DateTimePicker کنترل کامل و قابل اطمینانی هست ولی برای تقویمی که انتخاب میکنه مسائلی هم داره که شاید خوشایند نباشند:

  • تقویم انتخابی، بر اساس Culture جاری هست که به طور پیش‌فرض تقویم ویندوز رو برای نمایش انتخاب میکنه. با عدم پشتیبانی ویندوز از تقویم شمسی، اعمال تقویم شمسی به Culture جاری کمی دردسر داره. (ولی شدنی هست.)
  • مقدار خالی رو پشتیبانی نمی‌کنه. به این معنی که کنترل حتما باید مقداری رو -که از نوع DateTime هست- داشته باشه.
  • و البته اینکه open-source نیست. (بر خلاف بخشهایی از .NET Framework که open-source هست.)

نمونه‌های مشابه

برای حل مشکلاتی که اشاره کردم، کنترل‌‌های مختلفی توسط توسعه دهنده‌های ایرانی برای WinForms ساخته شده. من خیلی از اون‌‌ها رو بررسی کردم ولی اغلب مشکلات زیادی دارن و حتی اون‌های هم که open-source هستن نیاز به کار زیادی برای بهبود دارن. بعضی مشکلاتی که من تا به حال دیدم این‌ها هستند:

      • اختصاصی برای تقویم شمسی؛ این کنترل‌ها مختص تقویم شمسی ایجاد شدن و قابلیت کار با تقویم غیر از شمسی رو ندارن. بنابراین اگه لازم بشه در نرم افزاری تقویم شمسی در کنار تقویم میلادی مورد استفاده قرار بگیره کاربردی ندارن.
      • فرمت ثابت؛ این کنترل‌ها اغلب برای فقط دریافت تاریخ، اون هم در فرمت ثابتی مثل yyyy/MM/dd طراحی شدن بنابراین نه تنها امکان دریافت زمان در کنار (و یا بدون) تاریخ فراهم نیست، بلکه فقط قادر هستن تاریخ رو با فرمت ثابت دریافت کنن. برای مثال اگه شما بخواهید کاربر مؤلفه سال رو به صورت دو رقمی، نه چهار رقمی وارد کنه، این کنترل‌‌ها توانایی مانور در این زمینه رو ندارند.
      • عدم پشتیبانی صحیح از کیبرد و موس به صورت کامل و صحیح؛
      • واسط کاربری غیر استاندارد؛ همه کنترل‌هایی که من تا به حال دیدم از واسط کاربری غیر استاندارد رنج می‌برن. مشکلاتی از قبیل استفاده از فونت ها و رنگ‌های خاص و غیر قابل تغییر، اندازه‌‌های نامناسب و ثابت و… .

DateTimeSelector

کنترل DateTimeSelector با هدف پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود) نوشته شده و سعی شده که مشکلاتی که در مورد DateTimePicker‌ و همچنین مشکلات نمونه‌های مشابه ایرانی که بهش اشاره کردم رو نداشته باشه. در واقعه، ویژگی‌های این کنترل، نداشتن مشکلاتی هست که بهش اشاره شد:

  • پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود)
  • پشتیبانی از مقدار null (خالی) برای مقدار
  • امکان انتخاب زمان، تاریخ و یا هر دو
  • امکان تغییر فونت و جهت (Direction)
  • امکان تغییر رنگ‌ها
  • طراحی گرافیکی منطبق بر Style ویندوز و برنامه
  • پشتیبانی مناسب از کیبرد و موس*
  • رسم با سرعت بالا بدون Flicker
  • open-source و تحت لیسانس MIT
  • و…

* در زمینه پشتیبانی کامل از موس و کیبرد کمی جای کار داره
چند Screenshot از این کنترل:

DateTimeSelector - Screenshot (1)
شکل 1 – انتخاب تاریخ شمسی
DateTimeSelector - Screenshot (2)
شکل 2 – انتخاب تاریخ و ساعت (شمسی)
DateTimeSelector - Screenshot (3)
شکل 3 – انتخاب تاریخ میلادی با فرمت نمایش دلخواه

دریافت

در حال حاضر، ویراست 1.1.2 این پروژه در Github قرار گرفته که برای بررسی می‌تونید از این لینک ها استفاده کنید:
پروژه در Github
دانلود سورس و یا باینری (DLL)

سوالات متداول (این بخش به مرور بروز رسانی میشه)

با توجه به سوالاتی که مطرح شده دراین قسمت توضیحاتی رو در مورد نحوه استفاده از کنترل قرار میدم تا ابهامات رایج رفع بشه.

چطور این کنترل رو به Toolbox‌ اضافه کنیم؟

برای نمایش کنترل در Toolbox بر روی Toolbox راست کلیک کنید و گزینه Choose Items… رو انتخاب کنید. در پنجره ی Choose Items…، بخش .NET Framework Components گزینه Browse… رو کلیک کنید و فایل DateTimePicker.dll رو انتخاب کنید تا علاوه بر اضافه شدن Reference، کنترل مربوطه به Toolbox اضافه بشه.

چطور تاریخ و تقویم به صورت شمسی در کنترل نمایش داده میشه؟

این کنترل به صورت پیش‌فرض بر اساس Culture مربوط به Thread جاری (که تقویم اون میلادی هست) تاریخ و تقویم رو نمایش میده. برای شمسی کردن تاریخ، بدون توجه به Culture، مشخصه UsePersianFormat رو از پنجره Properties یا از طریق کد برابر True قرار بدید:

dateTimeSelector1.UsePersianFormat = true;

چطور تاریخ رو به صورت میلادی به کنترل انتساب بدیم و یا از کنترل دریافت کنیم؟

برای دریافت تاریخ جاری کنترل و یا انتساب یک تاریخ به کنترل از مشخصه Value استفاده کنید. این مشخصه از نوع DateTime? هست که میتونه مقدار null رو هم که معادل خالی بودن کنترل هست رو دریافت کنه یا برگردونه (توضیحات بیشتر در مورد مقادیر nullable).

// انتساب تاریخ جاری به کنترل
dateTimeSelected1.Value = DateTime.Now;

// دریافت تاریخ انتخاب شده
DateTime? selectedValue = dateTimeSelector1.Value;
if (selectedDate.HasValue) {
   DateTime value = selectedDate.Value;
   // تاریخ انتخاب شده در متغیر بالا قرار گرفته
}
else {
   // تاریخی انتخاب نشده
}

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

برای دریافت تاریخ به صورت شمسی میتونید از مشخصه Text استفاده کنید، در این حالت، تاریخ با فرمت جاری کنترل برگشت داده میشه:

نکته
به دلیل ترجیح استفاده از نوع تاریخ و مشخصه Value، مشخصه Text به طور پیش‌فرض مخفی هست در Editor نمایش داده نمیشه.

string text = dateTimeSelector1.Text;
MessageBox.Show(text);

در صورتی که بخواهید با فرمت خاصی تاریخ رو دریافت کنید میتونید از متد GetText استفاده کنید:

// دریافت تاریخ به صورت سال و ماه
string text = dateTimeSelector1.GetText("yyyy/MM");
MessageBox.Show(text);

برای انتساب تاریخ به صورت شمسی به کنترل میتونید از مشخصه Text استفاده کنید. کنترل سعی میکنه که تاریخ رو Parse کنه و به تاریخ میلادی تبدیل کنه، در صورتی که این عمل موقفیت آمیز نباشه مقدار کنترل خالی (null) میشه. بجای استفاده از این مشخصه میتونید خودتون بر اساس فرمتی که تاریخ متنی مورد تظرتون داره، با کمک کلاس PersianCalendar اون رو به تاریخ میلادی تبدیل کنید و به مشخصه Value انتساب بدین. احتمال خطا در روش دوم کمتره.

dateTimeSelector1.UsePersianFormat = true;
dateTimeSelector1.Text = "1395/10/12";

چطور تاریخ و زمان رو با فرمت های مختلف در کنترل نمایش بدیم؟

همونطور که اشاره کردم و در تصاویر هم مشخصه، کنترل میتونه تاریخ و زمان رو با فرمت دلخواه نمایش بده و ذخیره کنه. برای نمایش در یکی از فرمت‌های پیش‌فرض از مشخصه Format استفاده کنید:

// نمایش زمان بدون تاریخ
dateTimeSelector1.Format = Atf.UI.DateTimeSelectorFormat.Time;

برای نمایش در فرمت دلخواه، مشخصه Format رو برابر Custom قرار بدین و مشخصه CustomFormat رو مقدار دهی کنید:

// نمایش تاریخ و زمان
dateTimeSelector1.Format = Atf.UI.DateTimeSelectorFormat.Custom;
dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm:sstt";

برای آشنایی بیشتر با مولفه‌های تاریخ سفارشی اینجا رو مطالعه کنید. این کنترل از بیشتر این مولفه ها پشتیبانی میکنه.

چطور از تغییر مقدار کنترل مطلع بشیم و یا چطور کنترل رو Bind کنیم؟

رویداد ValueChanged زمانی که مقدار جاری کنترل تغییر میکنه نمایش داده میشه. همینطور برای Bind کردن مقدار کنترل میتونید از مشخصه Value استفاده کنید.

چطور بخش تقویم کنترل رو سفارشی کنیم؟

با استفاده از مشخصه های CalendarBackColor ،CalendarForeColor ،CalendarTitleBackColor ،CalendarTitleForeColor و CalendarTrailingForeColor در پنجره Properties یا از طریق کد میتونید رنگ بخش های مختلف تقویم رو تغییر بدین. به صورت پیش‌فرض این رنگ ها مطابق با تم ویندوز هستن. برای راست یه چپ کردن تقویم هم از مشخصه CalendarRightToLeft استفاده کنید.

140 thoughts on “کنترل تاریخ با پشتیبانی تقویم شمسی برای Windows Forms”

  1. سلام من DLL رو به رفرنس اضافه کردم حالا چطوری ازش استفاده کنم توی toolbox گشتم نمیاد

    1. با سلام،
      برای نمایش کنترل در Toolbox بر روی Toolbox راست کلیک کنید و گزینه Choose Items… رو انتخاب کنید. در پنجره ی Choose Items…، بخش .NET Framework Components گزینه Browse… رو کلیک کنید و فایل DateTimePicker.dll رو انتخاب کنید تا علاوه بر اضافه شدن Reference، کنترل مربوطه به Toolbox اضافه بشه.

  2. سلام
    اگه بخوام تاریخ روز را نشون بدم باید چه کدی بنویسم؟
    برای اضافه و کم کردن روز و ماه چطور؟

  3. سلام. جمله: “اعمال تقویم شمسی به Culture جاری کمی دردسر داره. (ولی شدنی هست.)” را بیشتر توضیح می دهید. من برای devexpress datetiemedit لازم دارم.

    1. سلام. تنظیم یک تقویم در Culture ی که اون تقویم در لیست Optional Calendar اون نیست خطای Runtime ایجاد میکنه ولی میشه با استفاده از Reflection این اعمال رو انجام داد و کلاس تقویم شمسی (Persian Calendar) رو به Calture جاری اعمال کرد.
      در این لینک ها توضیحات بیشتری هست:
      Art of Programming
      barnamenevis.org
      و البته نگاهی هم به کلاس PersianDateTimeFormat در همین پروژه بندازین.

  4. برای اینکه بتونیم هم زمان و هم تاریخ رو وارد کنیم(شکل 2) باید چه تنظیمی انجام بدیم؟

    1. متوجه شدم باید customFormat رو تعریف کنیم.
      حالا یه مشکل کوچیک وجود داره و اون اینکه اگر بعد از اینکه Value رو set کردیم، بخواهیم اون رو null کنیم، روی کنترل، عدد مربوط به مقدار دقیقه پاک نمیشه به عبار ت دیگه اگه کد زیر رو اجرا کنید:
      dateTimeSelector1.Value = DateTime.Now;
      dateTimeSelector1.Value = null;
      مشکل رو میبینید.

      1. سلام. ممنون بابت پیدا کردن این باگ. مشکل برطرف شد و ویراست آپدیت شده روی Github قرار گرفته.

        1. ممنون از اقدام سریع.
          اون مشکل رفع شد ولی بعد از نال شدن Value ظاهرا CustomFormat هم ریست میشه؛ چون دیگه نمیشه زمان رو وارد کرد.
          و یک درخواست ،امکان اینکه دکمه نال کردن تاریخ رو (علاوه بر تاریخ روز که موجوده) به صفحه popup اضافه کنید وجود نداره؟

          1. فکر کنم مشکل قبل از نال کردن هم وجود داره، چون الان CustomFormat اعمال نمیشه و کلا نمیشه زمان رو وارد کرد:
            dateTimeSelector1.CustomFormat = “yyyy/MM/dd hh:mm:ss tt”;
            dateTimeSelector1.Value = DateTime.Now;
            فقط تاریخ رو نشون میده.

          2. ظاهرا شما فراموش کردین که مشخصه Format رو روی Custom بگذارین برای همینه که فقط تاریخ رو نشون میده 🙂

            dateTimeSelector1.Format = Atf.UI.DateTimeSelectorFormat.Custom;
            dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm:sstt";
            dateTimeSelector1.Value = DateTime.Now;
            dateTimeSelector1.Value = null;
            dateTimeSelector1.Value = DateTime.Now;

            در مورد دکمه خالی کردن popup هم، امکانش هست ولی من فعلا برنامه ای برای آپدیت کنترل (بجز رفع باگ) ندارم، میتونید خودتون source رو دانلود کنید و با کمی وقت گذاشتن به صورت customize شده در بیارید.

  5. سلام خسته نباشین . من تمام کارهایی که گفتین رو انجام دادم ولی تو قسمت tool box نیومد . گزینه show all رو فعال کردم بین گزینه ها دیدمش ولی کمرنگ بود و نمیشد انتخابش کنم . لطفا راهنماییم کنین

  6. سلام
    میخواستم دو تا تاریخ رو از هم کم کنم
    مثلا میخام تاریخ دو تا چک رو از هم کم کنم و بقیه برنامه

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

  8. سلام ، اگر بخواهم اين كامپوننت به صورت پيش فرض 10 روز قبل را نمايش دهد چه كدي بايد بنويسم.

    1. با سلام، امکان خودکاری برای چنین کاری ارائه نشده. بایستی تاریخ ده روز قبل رو با استفاده از مشخصه Value به کنترل بدین.

      dateTimeSelectio1.Value = DateTime.Now.AddDays(1);

  9. با سلام
    من فایب dll اد کردم کامپوننت datetimeselector اومد وقتی میخوام ازش استفاده کنم error میده که از namespace نا معتبری استفاده میکنید لطفا راهنمایی کنید
    با تشکر

  10. سلام
    خیلی کنترل خوبی شده، تشکر
    یه سوال در مورد رویدادها؛ توی DateTimePicker یه رویدادی وجود داره به نام CloseUp که وقتی که وقتی کاربر تاریخ جدیدی انتخاب میکنه و Drop-Down رو میبنده فراحوانی میشه، من نتونستم هم ارز این رویداد رو توی این کنترل پیدا کنم.
    در واقع رویدادی که فراخوانیش وابسته به تغییر مقدار کنترل توسط کاربر باشه رو دنبالشم که بدونم کدومه.
    با سپاس

    1. با سلام،

      رویداد مربوط به تغییر تاریخ ValueChanged هست که در هر دو کنترل هم وجود داره. البته دقت کنید این رویداد با رویداد CloseUp متفاوت هست. کاربر ممکنه بدون باز کردن تقویم رو تغییر بده که در این حالت رویداد CloseUp اتفاق نمی‌افته.

  11. سلام
    و عرض خسته نباشید
    ممنون از کامپوننتون
    اگه ممکنه تمامی فرمت ها رو بنویسید ، منظوم تو Costume Format
    با تشکر

    1. با سلام، سوالتون واضع نیست. فرمت های رایج در لیست فرمت هستن و زمانی که احتیاج دارین فرمتی غیر از اونها رو داشت باشید، مشخصه فرمت رو روی Custom میگذارین و یک رشته برای فرمت مورد نظر به مشخصه CustomFormat ارائه میدین. در این رشته میتونید تعیین کنید که چه مولفه هایی از تاریخ/زمان با چه ترتیب و در چه قالبی نمایش داده بشه. برای اطلاعات بیشتر در مورد فرمت سفارشی، اینجا رو مطالعه کنید.

      1. سلام و تشکر از جوابتون
        مشکلم با راهنمایی شما حل و فصل شد.
        میخواستم بدونم چه طوری میتونم قبل از اجرای برنامه یک ماژول برای کلمپوننت شما بسازم تا تاریخ بروز فارسی رو رفراخوانی کنم .
        به عنوان مثال وقتی فرم رو لود میکنم تاریخ روز رو با هر فرمتی که بنده بنویسم تو یک textbox قرار دهم.
        بنده با یک کامپونت دیگه یک ماژول ساختم و :
        Function DateShamsi() As FarsiLibrary.Utils.PersianDate
        DateShamsi = FarsiLibrary.Utils.PersianDate.Now
        End Function
        این کد رو نوشتم وقتی dateshamsi رو فراخوانی میکنم تاریخ روز رو برمیگردونه.
        ممنون میشم راهنمایی کنید.
        با vb.net مینویسم

        1. با سلام،
          NET. از تقویم فارسی پشتیبانی میکنه و شما برای دریافت تاریخ روز نیازی به ابزار خاصی ندارید. کلاس PersianCalendar رو بررسی کنید.

          1. با سلام
            با databindidng (text) مکشل داره؟
            من هر چی با نک رو انتخاب میکنم هیچ چیزی ذخیره نمیشه.
            با تشکر

          2. مشخصه ای که باید باهاش کار کنید Value هست؛ یک مقدار از نوع DateTime.

  12. Value ?
    بنده دو قسمت databindings تو رویداد text نام جدول رو انتخاب میکنم ولی وقتی دیتا بیسم رو آپدیت میکنم تاریخ تو بانک ذخیره نمیشه

  13. سلام. امکان اینکه بصورت شمسی خروجی بده هست و یا باید خروجی شمسی رو با کلاس persian بدست اورد؟

    1. با سلام،

      مشخصه Text مقداری که در کنترل در حال نمایش هست رو (بر اساس فرمت تنظیم شده برای کنترل) به صورت رشته خروجی میده. البته این مشخصه در Editor نمایش داده نمیشه ولی اگه استفاده کنید به خطایی بر نمی‌خورید.

      علاوه بر این مشخصه، می‌تونید از متد GetText با فرمت دلخواه استفاده کنید. برای مثال این متد با تعیین فرمت ورودی yyyy/MM/dd مقدار 1394/05/15 رو به صورت رشته برگشت میده.

  14. سلام ، ببخشید من چجوری میتونم از تقویم شمسی استفاده کنم چون وقتی از toolbox میآورم به انگلیسی و میلادی هست ، ممنون

    1. با سلام، از پنجره Properties یا از طریق کد مشخصه UsePersianFormat رو برابر true قرار بدین.

  15. سلام . زمانی که میخوام dll این کامپوننت رو به تبی که توی toolbox ساختم اضافه کنم ارور میده و میگه
    there are no componnent in that can be placed on the toolbox
    ویژوال استدیو 2015 هست
    ممنون میشم راهنمایی کنید

  16. سلام؛
    ببخشید من خیلی وارد نیستم و دارم یک نرم افزار کوچک در vb.net با .net framework 4 می نویسم. فایل dll رو دانلود کردم و به فرم هم اضافه کردم ولی وقتی نرم افزار رو اجرا می کنم تقویم میلادی نشون میده.
    باید چه کار کنم؟

  17. با سلام و خسته نباشید.
    ممکنه یه راهنمایی کلی از دستوراتی که میشه استفاده کرد با چندتا مثال تهیه کنید و بذارید همه استفاده کنن؟
    ممنون میشم.
    و حالا مشکل من:
    فکر کنید یه تاریخ انتخاب کردیم مقدار value آن تاریخ میلادی میشه
    مقدار text آن همون شمسی.
    من میخوام توی دیتابیس.م شمسی ذخیره بشه و بعدا اگه خواستم مقدارش رو برای ویرایش به همین کامپوننت بدم باید چکار کنم؟

    1. با سلام،

      ممنون از پیشنهاد شما، در نظر میگیرم.

      در مورد مشکل شما، معمولا توصیه این هست که شما تاریخ رو به صورت میلادی در دیتابیس ذخیره کنید و فقط برای رابط کاربری به شمسی تبدیل کنید، ولی به هر حال اگه به صورت شمسی ذخیره میکنید میتونید مقداری که از دیتابیس به صورت رشته دریافت میکنید رو به مشخصه Text نسبت بدید، کنترل سعی میکنه که اون رو Parse کنه و به تاریخ میلادی تبدیل کنه. راه دیگه این هست که خودتون اون تاریخ رو به میلادی تبدیل کنید و به مشخصه Value انتساب بدین.

      موفق باشید.

  18. سلام.واقعا ممنون از جواب سریع.تون
    چون توی دستیارش Text نداشت فکر میکردم نداره و تست هم نکرده بودم.
    باز هم ممنون و خسته نباشید.

  19. من بعد از انجام این مرحله:
    برای نمایش کنترل در Toolbox بر روی Toolbox راست کلیک کنید و گزینه Choose Items… رو انتخاب کنید. در پنجره ی Choose Items…، بخش .NET Framework Components گزینه Browse… رو کلیک کنید و فایل DateTimePicker.dll رو انتخاب کنید تا علاوه بر اضافه شدن Reference، کنترل مربوطه به Toolbox اضافه بشه.
    کنترلی که اضافه شده (ایکونش شکل چرخدنده است) رو داخل فرم درگ می کنم و بعد run می کنم این پیغام خطا میاد:
    Could not load file or assembly ‘DateTimeSelector, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.
    چرا؟؟

    1. فایل باینری که برای دانلود گذاشته شده با دات نت 2 کامپایل شده و اگه در سیستم دات نت 2 نداشته باشید و 4 داشته باشید ممکنه به مشکل مواجه بشید. میتونید سورس کد رو دانلود کنید و خودتون فایل DLL رو کامپایل کنید. احتمالا مشکل رفع میشه.

      1. با سلام ممنون از پاسخ سریعتون
        دات نت من 4 هستش. ولی نمیدونم چطور باید ایل DLL رو کامپایل کنم. اگر امکانش هست توضیح بدید ممنون
        ضمناً Visual Studio من 2010 هستش و زبان برنامه نویسی VB.net

        1. سلام،
          سورس کد رو از Github دانلود کنید، فایل DateTimeSelector.sln رو با VS باز کنید، در بخش Properties پروژه، دات نت رو روی 4 قرار بدین و پروژه رو Build کنید. در پوشه debug یا release ی که ساخته میشه یک فایل dll ایجاد میشه که میتونید از اون استفاده کنید.

          1. سلام مجدد و ممنون ز پاسخ گویی شما
            من این کاری که شما گفتین را انجام دادم الان این پیغام خطا میاد:
            An error occurred creating the form. See Exception.InnerException for details. The error is: Could not load file or assembly ‘DateTimeSelector, Version=1.1.1.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.
            به import ها یا تنظیمات ویندوز یا CurrentThread ربط ندار؟
            باز هم ممنون
            System.Threading. Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(“fa-IR”)

          2. سلام، خواهش میکنم

            نه ربطی به تنظیمات ویندوز و… نداره. مشکل در لود کردن فایل DLL هست، ولی چیز دیگه ای به ذهنم نمیرسه.

  20. سلام. کنترل بسیار خوبیه. تشکر
    اما ایراداتی داره. ممنون میشم بررسی و درصورت امکان برطرف نمایید.

    1- اگه از این کنترل روی فرم بیش از یکی داشته باشیم و بخواهیم با استفاده از خاصیت UsePershianFormat اون رو فارسی کنیم، تمام کنترل های روی فرم چه اونی که روی میلادی تنظیم شده و چه اونی که روی شمسی تنظیم شده،ظاهر تقویم رو فارسی نشون میدن. البته این فقط در ظاهر اینجوریه و با انتخاب یک تاریخ از روی تقویم، تاریخ انتخابی درست خواهد بود یعنی شمسی و میلادی بودنش درسته فقط ظاهر نمایشی اون اشتباهه.
    2- خاصیت righttoleft این کنترل رو نمیشه با کدنویسی تنظیم کرد.

  21. سلام ممنون از کنترل جامع و کاملتون
    سه سوال داشتم اگه من بخوام یه سری روزهای خاص رو با استایل متفاوت نشون بدم راهی هست؟
    مثلا برنامه ای رو در نظر بگیرید که یه سری تاریخ تو دیتابیس ذخیره داره و شما میخاید اون تارخ ها رو در این کنترل به صورت متفاوتی نمایش بدین

    1. با سلام، چنین ویژگی ای برای کنترل در نظر گرفته نشده ولی اگه بخواید میتونید source code رو مطالعه کنید و خودتون اضافه کنید. کلاس CalendarControl و نحوه هایلایت شدن “امروز” رو بررسی کنید.

  22. سلام
    و خسته نباشید
    آیا میشه تو رویداد تعداد روز ها در ماه رو نشون داد شبیه dayinmonth متاسفانه من تو value هم پیدا نکردم

    1. سلام، منظورتون رو دقیقا متوجه نشدم که چه موقع و کجا میخواین تعداد روزها در ماه رو نمایش بدین؟ اگر منظورتون نمایش در خود کنترل هست، چنین امکانی نیست ولی اگه بخواین خارج از کنترل، تعداد روزها در ماهی که انتخاب شده رو نمایش بدین با استفاده از تاریخ انتخاب شده میشه تعداد روزها در اون ماه رو بدست آورد. اگه منظورتون همین هست میتونم بیشتر توضیح بدم.

  23. با سلام خدمت شما دوست عزیز
    واقعاً ممنونم از زحماتتون و اینکه dll بسیار جالب و کار راه اندازی هستش و به نظر من بسیار هم کامله ومهم تر از همه این که بسیار عالی تر شده که شما نحوه استفاده از این dll رو گذاشتین
    فقط من یک سوال از حضورتون دارم و اون هم این هستش که چطوری میتونم وقتی یک تاریخ شمسی رو انتخاب کنم در date selector دیگه بصورت اتومات تاریخ میلادیش هم انتخاب بشه
    باز هم از زحماتتون ممنونم

    1. سلام، در رویداد ValueChanged مربوط به اولی، مشخصه Value کنترل رو به مشخصه Value کنترل دیگه (تاریخ میلادی) انتساب بدید.

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

  24. سلام خیلی ممنون از زحماتتون.چطور می تونم با استفاده از این تقویم تعداد روزهای ماهها را بدست آورد. مثلا برای اسفند 1394عدد 29 و برای اسفند 1395عدد 30 بدست آید.

    1. با سلام، شما میتونید به سادگی یک شی از کلاس System.Globalization.PersianCalendar ایجاد کنید و با استفاده از متد GetDaysInMonth تعداد روزهای یک ماه رو بدست بیارید.

  25. با تشکر مشکل من حل شد. یک سوال دیگه هم داشتم و اونم اینه که آیا می شه با ترفندی به کاربر اجازه دهیم سریعتر سال مورد نظر را انتخاب کنه. باز هم تشکر می کنم که کمکم کردین.

    1. UsePersianForamt با کلیک روی کنترلی که روی فرم ایجاد کردین باید در پنجره Properties نمایش داده بشه. حالا اگه به هر دلیلی پیدا نشد، میتونید از طریق کد این مشخصه رو مقدار دهی کنید. دقت کنید کنترلی که روی فرم ایجاد میکنید با نام DateTimeSelector باشه و نه اجزاء اون.

  26. سلام وقتی کاربر تاریخی را انتخاب می کند کدی که درون رویداد ValueChanged وجود دارد دو بار اجرا می شود. چطور می توان کاری کرد که تنها یکبار اجرا شود. با تشکر

    1. ممکنه مشکلی باشه، باید بررسی کنم. به هر حال اگر این طور هست، میتونید درون متدی که برای این رویداد مینویسید، مقدار جاری رو با مقداری که از قبل ذخیره کردید مقایسه کنید و تنها در صورت تغییر مقدار کد مورد نظرتون رو اجرا کنید.

  27. سلام ، چه طور می شه
    روز ، و ماه و سال را به حروف درون یک label نشون داد ؟

    مثلا
    یکشنبه 15 مهرماه 1397
    درون یک label

  28. سلام ، چه طور می شه
    تاریخ را به حروف درون یک label نشون داد ؟

    مثلا
    دوشنبه 15 مهرماه 1397
    درون یک label

  29. سلام ، ممنون از کنترل ساخته شده
    کلمه فروردین در ماه مشکل املایی دارد در تقویم لطفا بررسی کنید

    1. سلام، ممنون از اشاره به این نکته! متاسفانه در حال حاضر امکان اصلاح و انتشار مجدد نیست و میتونید خودتون زحمت اصلاح (در فایل datetimeselector\Atf.UI\DateTimeSelector\PersianDateTimeFormat.cs) و کامپایل مجئد رو بکشید.

  30. سلام
    ممنون از شما بابت کنترلر
    یه سوالی من اگه بخوام فقط از زمان استفاده کنم میشه ؟

    1. سلام. بله مشکلی نداره ولی برای زمان میتونید از کنترل تاریخ خود NET. استفاده کنید و فکر نمیکنم نیازی به استفاده از این کنترل باشه هرچند که مشکلی در رابطه با استفاده از این کنترل نیست.

  31. خیلی عالی ولی 2تا ایراد جزئی داره
    1-فرمت تاریخ رو روی Long ست کنید و عدد تاریخ رو تغییر بدین ، روز تغییر نمیکنه تا اینکه فوکوس بره یا سل کناری رو انتخاب کنید.(در خود datetime picker دات نت با تغییر عدد روز همزمان تغییر میکنه)
    2-رنگ روزها به رنک تایتل بسته شده و من میخوام تایتل یفید استفاده کنم که باعث میشه روز ها در پاپ آپ خوانده نشن.

  32. Error 2 The type or namespace name ‘Atf’ could not be found (are you missing a using directive or an assembly reference?) c:\users\admin_office\documents\visual studio 2010\Projects\WindowsFormsApplication3\WindowsFormsApplication3\Form1.Designer.cs 31 42 WindowsFormsApplication3

    /// Required method for Designer support – do not modify
    /// the contents of this method with the code editor.
    ///
    private void InitializeComponent()
    {
    this.dateTimeSelector1 = new Atf.UI.DateTimeSelector();
    this.SuspendLayout();
    //
    // dateTimeSelector1

  33. با سلام
    من از تقویم شما در نرم افزاری ویندوزی که در سی شارپ نوشتم استفاده کرده ام و تا دیروز خیلی خوب کار می کرد فقط از امروز ویژوال استودیو خطای زیر را نشان می دهد و اجازه اجرا نمی دهد ممنون میشم راهنمایی بفرمایین با تشکر
    Not a valid calendar for the given culture

  34. سلام
    خطای Not a valid calendar for the given culture که قبلا گفتم هنگامی که UsePersianFormat را برابر true قرار می دهم رخ می دهد. البته من حدود 3 ماه است که از این تقویم بدون هیچ مشکلی استفاده می کردم ولی از دیروز تمام جاهایی که خاصیت UsePersianFormat برابر true هست را خطا می ده. با تشکر

  35. با سلام
    می خواستم مورد اول از مطلب ارسالی خودم را اصلاح کنم اون قسمتی که نوشته بودم “اجازه اجرا نمی دهد” وقتی اجرا می کنم خطای بالا را می ده و اجرا متوقف می شه ولی وقتی روی دکمه Continue کلیک می کنم برنامه بدون مشکل اجرا می شه. فقط ترسم اینکه روی سیستم مشتری کرک کنه.
    خطا در خط 486 از کلاس DateTimeSelector رخ می ده(همون خطای بالا) و هدر خطا هم اینه
    ArgumentOutOfRangeException occurred
    با تشکر

    1. با سلام، به نظر میاد این استثنا مربوط به کلاس PersianDateTimeFormat خط 62 باشه که در همون متد هم catch میشه و مشکلی وجود نداره. ظاهرا تنظیمات شما در Visual Studio به شکلی هست که در حالت Debug با رخداد این نوع استثنا، اجرای برنامه متوقف میشه. (تنظیمات Exceptions رو بررسی کنید.) اگر موضوع این باشه، هیچ مشکلی وجود نداره و این استثنا مدیریت شده هست.
      موفق باشید.

  36. سلام

    اولا از زحمتی که برای این کار تشکر فراوان
    ما يه مشکلي پيدا کردیم توي يه سيستم ديگه این نرم افزاری که از این تاریخ شمسی استفاده شده در واقع publish نصب کردیم منتها بعد چند روز وقتی میخای تاریخ رو عوض کنی این ارور رو میده
    conversion failed when converting date and/or time from character string

    1. با سلام. توصیه میشه که شما تاریخ رو به صورت رشته ای ذخیره و بازیابی نکنید و به صورت Date/Time نگه داری کنید. حالت رشته ای تاریخ میتونه وابسته به تنظیمات سیستم بشه و موقع تبدیل با مشکل مواجه بشید.

  37. سلام چرا مناسبت هارو بهش اضافه نکردید؟میشه راهنمایی کنید خودمون انجام بدیم؟

  38. سلام
    میشه لطفا دکمه up/down رو هم برای تنظیم ساعت توسط کاربر به کامپوننت خوبتون اضافه کنید تا مشکل ورود ساعت هم حل بشه؟
    با تشکر

    1. با سلام. متاسفانه در حال حاضر برنامه ای برای بروز رسانی این کنترل وجود نداره. البته میتونید با مطالعه سورس کد ویرایش مورد نظر رو انجام بدید.

  39. سلام
    میشه لطفا دکمه up/down رو هم برای تنظیم ساعت توسط کاربر به کامپوننت خوبتون اضافه کنید تا مشکل ورود ساعت هم حل بشه؟
    با تشکر

  40. سلام و خسته نباشید و تشکر فراوان از توضیحاتتون
    من من یه مشکلی برام پیش اومده نتونستم حلش کنم ممنون میشم راهنماییم بکنید.
    من تاریخ هارو بصورت رشته ای و با فرمت yyyy/MM/dd تو دیتابیسم ذخیره کردم . الان چجوری میتونم مقدار رو بخونم و تو timeselector بزارم . چون خاصیت text نداره و فقط value داره. با conver.todatetime امتحان کردم جواب نگرفتم.
    ممنون میشم کمکم بکنید
    بازم تشکر

    1. با سلام، خاصیت Text موجود هست ولی در Editor نمایش داده نمیشه (چون توصیه نمیشه به صورت متنی ذخیره و بازیابی کنید). بنابراین اگر از خصوصیت Text استفاده کنید برنامه کامپایل میشه و با خطا مواجه نمیشید.

  41. سلام موقع اضافه کردن به toolbox خطا زیر رو اعلام میکنه
    there are no component in F:\narminehafzar\DateTimeSelector.dll that can be placed on the toolbox

  42. با سلام مجدد
    مشکل رو حل کردم راه حل داخل یک سایت گذاشته شده بود
    In some cases you can solve this problem with drag and drop:

    open Windows explorer and navigate to the DLL
    drag the DLL and drop it on Visual Studio in the Toolbox, exactly where you want your components to appear
    بازهم تشکر

  43. سلام.چیکار کنیم که اجازه ندیم به کاربر تاریخ قبل از امروز رو انتخاب کنه؟!
    به نوعی تاریخ های قبل از امروز رو براش غیر فعال کنیم؟!

    1. با سلام، متاسفانه امکانی برای محدود کردن تاریخ پیاده نشده. البته کنترل Calendar به صورت Popup باز میشه این امکان رو داره ولی در خود کنترل تاریخ پیاده سازی نشده. راهی که هست این هست که بعد از انتخاب یک تاریخ توسط کاربر، رویداد ValueChanged اتفاق میفته که میتونید در این رویداد، در صورتی که تاریخ قبل از تاریخ امروز باشه، با انتساب تاریخ روز به کنترل، تاریخ رو تغییر بدید.

      1. ممنون از پاسخگویی سریعتون/
        یه سوال دیگه .. من میخوام کاربر تاریخ رو از روی تقویم به صورت شمسی انتخاب کنه بعد تاریخی که انتخاب کرده رو به تاریخ میلادی تبدیلش کنم..یعنی درواقع اینو :
        dateTimeSelector1.GetText(“yyyy/MM/dd”)
        چطور انجامش بدم؟
        (برای تبدیل به میلادی میشه از کلاسPersianCalendar و تابع این کلاس یعنی ()ToDateTime استفاده کرد ولی باید سال و روز و ماه به صورت تفکیک شده باشه.راهی هست که این تقویم تفکیک کنه برامون؟)

        1. با سلام، خواهش میکنم. بجای استفاده از متدهایی که از طریق Text کار میکنند، شما به راحتی میتونید با استفاده از مشخصه Value، تاریخ انتخاب شده رو به صورت یک شی از نوع DateTime دریافت کنید و به مولفه های تاریخ (سال، روز، ماه و …) دسترسی داشته باشید و بتونید تاریخ رو به تاریخ میلادی تبدیل کنید.

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

    1. با سلام،
      متاسفانه امکانی برای این نیاز شما پیاده سازی نشده. تنها راه این هست که سورس کد رو دانلود بکنید، تغییرات رو اعمال کنید و دوباره کامپایل کنید. برای افزودن امکان مد نظر شما بایستی سورس کد رو مطالعه کنید. به عنوان راهنمایی، متد DrawDay از کلاس CalendarControl وظیفه رسم هر سلول (روز) رو داره که میتونید با بررسی تاریخ رنگ پس زمینه رو تغییر بدید.

  45. سلام و خسته نباشد مجدد
    من چطوری میتونم ساعت رو به صورت فرمت 24 ساعته اونم فقط با ساعت و دقیقه ذخیره کنم ؟ وقتی مثلا 18 میزنم خودکار میکنتش 6 … ممنون میشم راهنماییم کنید .
    تشکر

    1. با سلام،
      کنترل فقط تاریخ و ساعت رو نمایشه میده و از کاربر دریافت میکنه، نحوه ذخیره سازی به عهده شما هست. ولی در مورد نمایش، برای مشاهده ساعت به صورت 24 ساعته و بدون ثانیه، مشخصه Format رو روی Custom قرار بدین و مشخصه CustomFormat رو HH:mm (حروف بزرگ H) بگذارید. مشخصه Value رو میتونید برای ذخیره و بازیابی استفاده کنید.

  46. سلام
    ممنون بابت زحمتتون
    در این کنترلر که طراحی کردید، کاربر چطور میتونه تاریخ چند سال بعد یا چند سال قبل رو انتخاب کنه؟ من فقط دو نشانه گر برای انتخاب ماه میبینم….
    ممنون

    1. سلام، بخش تقویم که به صورت Popup نمایش داده میشه به صورت کامل برای کار با موس بهینه نشده. برای انتخاب سریع چند سال قبل بهتره از کیبرد برای ورود سال استفاده بشه.

  47. با سلام من تاریخ رو با این کنترلر با دستور text ذخیره کردم حالا میخام برای ادیت کردن مجدد تاریخ درون دیتا بیس بهش پاس بدم هر راهی که براش گفتین انجام دادم ممکنه راهنمایی کنید چطور تاریخ رو برای ادیت کردن کاربر بهش پاس بدم
    با سپاس فراوان

  48. سلام
    میخاستم برا ادیت تاریخ رو از دیتا بیس به کنترلر پاس بدم از این کد استفاده کردم
    dateTimeSelector1.Text = this.tavalod;
    ولی کار نمیکنه من تاریخ رو با همین روش یعنیdateTimeSelector1.Text به دیتا بیس پاس دادم
    با تشکر

    1. با سلام، توصیه میشه تاریخ رو با مشخصه Value به صورت DateTime در دیتابیس ذخیره و بازیابی کنید. برای ذخیره متنی هم مشخصه Text کار میکنه ولی در Editor نمایش داده نمیشه (امتحان کنید، کد کامپایل میشه). اگر بعد از مقدار دهی مقدار تاریخ اعمال نشد به دلیل این هست که فرمتی که ذخیره کردین با فرمت تاریخ سیستم نمیخونه. به همین دلیل توصیه میشه تاریخ رو به صورت DateTime ذخیره کنید تا وابسته به تنظیمات سیستم نباشه.

  49. سلام ممکنه اگه وقت دارین این چن سوال به صورت مثال توضیح بدین ممنون میشم یکی اینکه همین که فرمودید به صورت datetime ذخیره کنم چطور انجامش بدم مثلا همون کد خطی که باید بنویسم برا پاس دادن به دیتا بیس بنویسید من اینطور پاس میدم
    r.dateremember = dateTimeSelector1.Text;
    که r این هستش remember r = new remember();
    همون کد پاس دادن چطور بنویسم و پاسش بدم برا دیتا بیس
    و اینکه من مثلا دو تا dateTimeSelector میزارم تو صفحه میخام زمانی که فرم لود بشه در همون لحظه یکی تاریخ همون روز نمایش بده یکی هم 10 روز قبل نمایش بده ممنون میشم اگه کدها اینطو بنویسین مثلا
    dateTimeSelector=کدهای نمایش همون روز در زمان لود فرم
    dateTimeSelector=کدهایی که 10روز قبل باید نمایش بدن
    قیقتش من مبتدی هستم ممنون میشم کدها رو طوری توضیح بدین که یم مبتدی متوجه بشه
    ممنون که واقعا سریع پاسخ گو هستین

  50. باید تو دیتا بیس تاریخ رو با فرمت datetime قالببندی کنم؟برا تاریخ شمسی مشکلی پیش نمیاد؟
    من تاریخ رو بافرمت varchar قالبندی کردم تو دیتا بیسم

    1. بله بایستی به صورت میلادی ذخیره کنید. مشکلی پیش نمیاد، تاریخ رو به صورت میلادی ذخیره میکنید و فقط موقع کار کاربر از طریق کنترل به صورت شمسی نمایش میدید.

  51. با سلام
    برای دوستانی که میخوان مقدار را بصورت رشته دریافت کنند از کد زیر استفاده کنند
    وقتی دیبگ میکنید مقدار را نمیبینید ولی درست کار میکنه
    string text = dateTimeSelector1.GetText(“yyyy/MM/dd”);

    txtDueDateLetter.Text = convert_number_to_latter.convert_date(text.Trim());

  52. سلام خسته نباشید. ممنون از کنترل خوبتون فقط یه سوال داشتم:
    منم مثل بعضی از دوستان که اشاره کرده بودن می خوام دوتا کنترل توی فرمم بذارم یکی با تاریخ همون روز و دیگری تاریخ چند روز یا مثلا یک ماه قبل که با لود شدن فرم این تاریخ ها به صورت پیش فرض گرفته بشه و بعد توسط کاربر قابل تغیر باشه چطور باید اینکارو بکنم؟
    اینم بگم که من هم زمان رو می خوام و هم تاریخ اما زمان همون 00:00:00 پیش فرض برام کافیه فقط تاریخو میخوام همونطور که گفتم نمایش داده بشه.
    البته اگر زمان هم بشه به صورت دستی و پیش فرض بهش بدم که عالی میشه.
    ممنون از شما

    1. با سلام، همونطور که بارها اشاره شده، با استفاده از مشخصه Value میتونید تاریخ و زمان دلخواه خودتون رو هم از طریق Designer و هم از طریق کد به صورت یک متغیر از نوع DateTime به این کنترل انتساب بدید.

  53. با سلام.
    تشکر میکنم از زحماتتون.یک سوال داشتم اگر بخوام که کنترل از Culture Thread استفاده نکنه و خودم بهش culture بدم امکانش هست؟میخوام اگه Culture فارسی بود تقویم فارسی رو نشون بده و در غیر اینصورت Culture هر چی که بود تقویم میلادی رو نشون بده.
    با تشکر.

    1. با سلام،
      نحوه کار به این ترتیب هست که اگه مشخصه UsePersianFormat برابر True باشه از یک فرمت فارسی از پیش تایین شده استفاده میشه و در غیر این صورت از فرمت مروبط به Culture Thread جاری. یک مشخصه دیگه هم هست به نام DateTimeFormat که ممکنه در Editor نمایش داده نشه. این مشخصه از نوع DateTimeFormatInfo هست که در صورتی که اون رو به کنترل نسبت بدید از این فرمت بجای Culture Thread جاری استفاده میشه. یعنی لازم نیست که کل Culture Thread مورد نظرتون روبه کنترل بدید بلکه کافیه مشخصه DateTimeFormat اون Culture رو به مشخصه DateTimeFormat کنترل نسبت بدید تا از Culture جاری استفاده نشه. دقت کنید که در این حالت مشخصه UsePersianFormat برابر False باشه.

      ِDateTimeSelector dateTimeSelector1 = new DateTimeSelector();
      dateTimeSelector1.DateTimeFormat = myCulture.DateTimeFormat;

  54. سلام خیلی ممنون.من سورس رو تغییر دادم که تو هر فرم مجبور نباشم این تنظیمات رو انجام بدم.

  55. سلام ممنون از زحمات شما
    من موقعي كه dll رو به برنامه اضافه مي كنم vs2015 و تقويم رو تو فرم ميذارم برنامه اجرا نميشه و خطاي
    An unhandled exception of type ‘System.BadImageFormatException’ occurred in test.exe

    Additional information: Could not load file or assembly ‘BPersianCalender, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. An attempt was made to load a program with an incorrect format. نمايش ميده و بنظرم از عكسي كه تو كنترل ازش استفاده شده ايراد مي گيره ميشه لطفاً راهنمايي كنيد يا اگر با vs2015 كار نميكنه يه كنترل ديگه بهم معرفي كنيد.

    1. با سلام،
      شما DLL یک تقویرم دیگه (BPersianCalender) رو اضافه میکنید که این خطا رو میگیرید. DLL ی که من معرفی کردم اسمش DateTimeSeletor هست. این کنترل اصلا عکسی نداره.

  56. با سلام و تشکر از زحمات شما
    من یه مشکلی دارم اگر کمک کنید ممنون میشم.وقتی rightToLeft رو True میکنم تو ویندوز 10 سال رو سمت چپ میندازه ولی تو ویندوز 7 سمت راست، وقتی هم که false میکنم برعکس میشه.چکار کنم که هر دو مثل هم بشوند.میخواهم سال سمت چپ باشه بعد ماه و بعد روز.
    با تشکر

    1. ترتیب المان ها وابسته به Culture ترد جاریه که اون بسته به تنظیمات ویندوز هست. شما میتونین مشخصه Format رو روی Custom بگذارین و به مشخصه CustomFormat یک مقدار مثل yyyy/MM/dd بدین تا وابسته به تنظیمات ویندوز نباشه.

  57. با سلام و تشکر از زحمات شما

    ظاهرا همه چیز خوبه فقط مشکلی که من دارم اینه که اولا با صفحه کلید برای ماه اعدادی مثل 39 قبول میکنه. (که باید 1 تا 12 باشد)
    دوما با انتخاب تاریخ از پاپ آپ، تاریخ انتخاب شده تاثیری بر روی ماه ندارد و ماه بدون تغییر با همان مقدار قبلی (درست یا غلط) باقی می ماند

  58. با سپاس فراوان از شما
    میشه بگوید که این فایل رو از کجا میتوانم دانلود کنم

    1. با سلام، لینک به Github در آخر مطلب هست. روی اون کلیک کنید و در صفحه Github DateTimeSelector-v1.1.2-bin.rar و یا Source code (zip) رو انتخاب کنید.

  59. با سلام
    زمانی که اشاره گر موس روی کنترل هست اگه scroll کنیم خطا میده

    index was out of range

  60. سلام و ممنون از در اختیار گذاشتن زحماتتون
    ی سوال: من میخوام ی تاریخ انتخاب کنم و با زدن ی دکمه , روز اول ماه شمسی تاریخ انتخاب شده و روز اخر ماه رو نمایش بدم
    یا مثلا با ی دکمه دیگه , روز اول سال شمسی تاریخ انتخاب شده و روز اخر سال رو نمایش بدم
    راهکاری دارین برای این کار؟

    1. با سلام،
      شما میتونید با استفاده از کلاس PersianCalendar تاریخ های مورد نظر رو بدست بیارید و به این کنترل با استفاده از مشخصه Value نسبت بدید.

  61. سلام.
    ارتفاع کامپوننت ثابت ه و تغییر نمیکنه.
    گزینه ی auto size یا auto hight هم نداره که غیرفعال کنم.
    میشه راهنمایی کنید؟

    1. با سلام،
      ارتفاع کنترل بر اساس اندازه فونت تایین میشه. بنابراین امکان اینکه بدون تغییر اندازه فونت ارتفاع رو تغییر بدید وجود نداره.

  62. سلام ممنون تاریخ قشنگیه ولی من دو تا مشکل دارم ، یکی اینکه هرکار میکنم فرمت تغییر نمیکنه ببینید من میخوام به شمسی تو دیتا بیس ام ذخیره کنم و شمسی هم بخونم بنابراین زدم بصورت text در دیتا بیس ام ذخیره کردم و خوندم مشکلی که هست روز رو وقتی داره از دیتا بیس میخونه وسط میندازه هرکاری میکنم درست نمیشه ،
    دوم اینکه میخوام دوتا تاریخ از کاربر بگیرم اختلاف روزش رو حساب کنم راهنمایی میفرمایید چکار کنم تعداد روز ها رو در بیارم ؟

  63. بخشید اینم اضافه کنم وقتی میخوام تاریخ رو از GridView در #C بخونم این مشکل هست وگرنه هم در دیتا بیس ام درست ثبت میکنه هم در پنجره ی messageBox هم درست نشون میده ، لطفأ در مورد تفاضل تاریخ راهنمایی بفرمایید

  64. سلام من پروژه ام رو درست کردم و تاریخ رو از کامپوننت شما استفاده کردم ولی مشکلی که وجود داره اینه که تاریخ 31 شهریور رو خطا میده وقتی میخوام از دیتا بیس ام یه بازه ی زمانی رو بخونم در تاریخ ابتدا یا انتها اگر 31 شهریور باشه خطا میده…
    {“Conversion failed when converting date and/or time from character string.”}
    فکر میکنم باگ داره…

    1. متاسفانه باگ زیاد داره پروژه من تکمیل شده و در حال کار هست الان میبینم در تاریخ های 29 و 30 و 31 ادریبهشت هم همین مشکل وجود داره …
      Chehraz عزیز ، بفرمایید که آیا دارید کامپوننت رو درست میکنید یا کلا عوض کنیم؟

      1. با سلام، توسعه این پروژه متوقف شده، در صورتی که مایل باشید میتونید خودتون مشکلات رو برطرف کنید.

  65. سلام و تشکر از زحمات شما
    من از DLL شما استفاده کردم و عالی بود
    فقط یه نکته من از datetmeselector.value برای ذخیره استفاده میکنم
    جالبه برام مثلا 100 تا رکورد رو زمان ذخیره نمیکنه اون وسط یدونه زمان ذخیره میکنه البته هرکدوم هم زمان رو ذخیرع میکنه همه زمان ها تکراریه !
    اینجوری ذخیره میکنه 2018-12-23 00:00:00.000
    میشه راهنمایی بفرمایید

  66. سلام. کنترل بسیار خوبی هست و ممنون از این در اختیار ما گذاشتید. خیلی کار منو ساده تر کرد و باعث شد نیاز به چک کردن دستی و کنترل پایگاه داده از بین بره. ممنون.
    فقط یه بگ داره اونم جدا کننده بین روز و ماه و سال هست. مثلا من خواستم فرمت دلخواه رو روی yyyy-mm-dd تنظیم کنم ساز و روز رو به درستی نمایش میداد اما تمامی رقم ها ماه رو جدای از این که چه تاریخی رو سلکت میکردم 00 نشون میداد.

  67. سلام چه طور می تونم به این کامپوننت یه روز یا یک ماه و یا یک سال و بیش تر اضافه کنم.
    addday و …. داره ؟

  68. سلام وقت بخیر
    ممنون از کامپوننت بی نظیرتون
    من در ویندوز 10 باهاش یه مشکلی دارم
    علی رغم اینکه فرمتش رو yyyy/MM/dd به صورت custom قرار دادم و تویه comboBox مشکلی نداره اما هنگام انتخاب تاریخ مورد نظر از تقویم در قسمت footer فرمت مشکل داره و به صورت dd /MM/yyyy نمایش داده میشه
    حتی اگر فرمت custom رو به صورت yyyy/dd/MM انتخاب کنم تاثیری در قسمت footer تقویم نداره و باز به صورت dd /MM/yyyy نمایش داده میشه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *