سلام
یه دوست دیگه هم با پیام خصوصی این موارد رو گفته بودممنون بابت کامپوننت بسیار زیبایی که ایجاد کردید
همه نکات را رعایت کردید اما اگر datapicker خود net. را دیده باشی به صورت دستی هم می توان داخل آن مقدار ریخت و اینکه از کلیدهای بالاو پایین می توان جهت کم یا زیاد کردن روز و ماه وسال استفاده کرد همانطور که می دانید کاربرانی که از صفحه کلید در ویندوز جهت ثبت استفاده می کنند اصلا دوست ندارند که از موس استفاده کنند و باعث کندی کار میشه
البته این نظر شخصی من بود جهت بهبود کامپوننت
با تشکر
جوابی که دادم:با سلام
با تشکر از شما بابت تقویم زیبای شما
ایا امکان داره تو تقویم وقتی از datepicker استفاده می کنیم به صورت دستی تایپ کرد شما تایپ دستی رو بستید
میشه تایپ دستی هم قرار داد. فایل FarsiCalendar رو تو پروژه AmirCalendar تو حالت دیزاین باز کن و از پنجره پراپرتیها کنترل popupDatePicker انتخاب کن و پراپرتی DropDownStyle رو روی DropDown بزار. پروژه رو کامپایل کن و از Dll جدید استفاده کن. ولی .....
اول اینکه بهتره که تایپ نکنه تا تاریخ اشتباهی وارد نشه که حالا مجبور باشیم اون رو هندل کنیم. حالا به جای تایپ تو خود DropDown کاربر تو NumericUpDown هایی که استفاده شده تایپ کنه. زودتر هم به نتیجه میرسه
دوم اینکه فقط با set کردن پراپرتی گفته شده کارتون راه نمیافته چون من مقدار FarsiSelectedDate رو تو ایونت CellClick از گرید Set کردم و تغییر تکست DropDown کار این ایونت رو انجام نمیده و مجبورید ایونت popupDatePicker.TextChange رو خودتون طبق ایونت CellClick گفته شده بنویسید و البته تمام کنترلهای لازم رو هم برای وارد نشدن تاریخ اشتباه انجام بدید.
مجددا گفتن
و جواب:میدونی برای چی این قضیه رو گفتن چون من یه مدت بود ار تقویم تلریک استفاده می کردم داخل تقویم تلریک با کلید بالا و پایین می تونیم تاریخ رو کم وزیاد کنیم و اینکه به راحتی عدد وارد کنیم وقتی تاریخ رو به شمسی تبدیل می کردم کلید بالا وپایین خوب کار می کرد یعنی وقتی من روز ها را بالا می بردم وقتی ماه سی روز بود بعد از سی روز دیگه 31 نمی شد و یه عدد به ماه اضافه می شدتنها مشکلی که داره اینه وقتی حالت شمسی هست به صورت دستی وارد می کنیم اشتباه میزنه یه عدد دیگه ولی میلادی جواب میده
شما خیلی تقویم بسیار عالی درست کردید واقعا داخل .net همچین تقویمی نیاز است اما وقتی کاربر با صفحه کلید کار میکنه دیگه دوست نداره که از موس استفاده کنم اگه کاربر بتونه تو همون لحظه تایپ کنه وبره سراغ کنترل بعدی البته این نظرم من بود (اگه این دو قسمت که گفتم داشته باشه دیگه هیچی کم نداره)
بازم از شما متشکرم بابت این تقویم بسیار زیبا مخصوصا که روز های تعطیل هم داخل اون هست
واسه کار با کیبورد
فایل FarsiCalendar رو تو حالت دیزاین باز کن و از پنجره پراپرتی کنترل Popup رو انتخاب کن و ایونت های KeyDown و KeyUp رو ایجاد کن براش و 3 تا متغیر تعریف کن مثلا به اسم _yPress, _mPress, _dPress از نوع bool که نشون میدن کدوم کلید الان فشرده شده (Y/M/D). تو keyDown از مقدار e.KeyCode استفاده کن و با یه سویچ کیس تشخیص بده کدوم یکی از این 3 تا فشرده شده و متغیر مربوط به اون رو true کن. تو ایونت KeyUp هم از همین استفاده کن و اینبار مقدار کلیدی که رها شده رو false کن.
تو ادامه کدای keyDown یه سویچ کیس دیگه قرار بده و 2 حالت e.keyCode = Keys.Up و Keus.Down رو بررسی کن و داخل هر کدوم 3 تا if که مشخص میکنه کدوم قسمت تاریخ باید تغییر کنه. اگه yPress_ برابر true بود، تو بخش Keys.up یعنی سال رو باید 1 واحد ببری جلو. یعنی
((Value.SelectedFarsiDate = FarsiDateHelper.GetShortFarsiDate(Value.GregorianS electedDate.AddYear(1
واسه yPress_ برابر true و Keys.Down هم همین کد رو استفاده میکنی فقط به جای 1 میزازی 1-
این واسه سال.
واسه ماه هم از mPress_ و برای روز هم از dPress_ استفاده میکنی.
در اصل با ترکیب کلیدهای Y + Up/Down مقدار سال و کلیدهای M +Up/Down مقدار ماه و کلیدهای D + Up/Down مقدار روز رو تغییر میدیم.
10و 15 خط کد بیشتر نیست. پیاده سازیش با خودتون
خلاصه اینکه من کدهای این کامپوننت رو هم قرار دادم که دوستان هم اگه شد روش کار کنن و اون چیزایی که مد نظرشون هست رو بهش اضافه کنن و بزارن اینجا واسه استفاده بقیه
به هر حال، کار با کیبورد رو هم به این کامپوننت اضافه کردم. کلاس FarsiCalendar رو که تو همین پست پیوست کردم کافیه جایگزین فایل FarsiCalendar.cs بشه. بعدش پروژه رو یک بار کامپایل کنید و از کامپوننت استفاده کنید
تو حالت DatePicker طبق گفته قبلی، بخشهای تاریخ رو میتونید کم و زیاد بکنید
موفق باشیدبا ترکیب کلیدهای Y + Up/Down مقدار سال و کلیدهای M +Up/Down مقدار ماه و کلیدهای D + Up/Down مقدار روز رو تغییر میدیم