# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > VB.NET >  کومپوننت جدید DateTimePicker فارسی

## mostafaaa

با سلام خدمت اساتید محترم سایت
چند وقت پیش داشتم یه برنامه مینوشتم که احتیاج شدیدی به یه DateTimePicker فارسی داشتم ولی هر چی توی اینترنت گشتم چیزی که بتونه نیازهام رو براورده کنه پیدا نکردم. واسه همین یه کامپوننت خودم نوشتم . اون رو اینجا میزارم تا اساتید ببینن و نظرات و پیشنهاداتشون رو برای بهتر شدنش بدن.
البته الان مشکل زیاد داره ولی با کمک شما دوستان حلش میکنم.

و خود کمپوننت
دانلود
--------------
توی این مدت یه مقداری باز روی این کنترل کار کردم که امکاناتش به شرح زیره

اضافه کردن Smart Tag جهت استفاده راحتتر از کنترل و قرار دادن Property های پر کاربرد داخل اون

قابلیت انتخاب تاریخ پیشفرض با استفاده از Mouse و کاملا شبیه کنترل DateTimePicker خود دات نت

دارای یک ایونت به نام DateChange که در زمان تغییر تاریخ فراخوانی میشه
دارای یک Property برای Set و Get کردن تاریخ.

اینم خود کنترل
ShDateTimePicker.rar

البته اینم بگم که درصد GDI+ رو هم خیلی بالا بردم و فکر میکنم سرعتش خیلی بهتر شده.
منتظر نظرهاتون هستم

ورژن جدید این کمپوننت رو میدونید از تاپیک زیر دانلود کنید.
ورژن جدید کنترل DateTimePicker  فارسی

----------


## mostafaaa

سلام 
یعنی هیچکی تستش نکرد ببینه اشکال هاش چیه.؟!!

----------


## MORTEZA66

سلام دوست عزيز اينقدر عجله نداشته باشين از كامپوننت بسيار زيبا و كاربرديتون هم ممنونم من زياد تستش نكردم فقط تنها چيزي كه به ذهنم رسيد اينه كه موقعي كه بسته مي شه و فقط حالت نمايش تاريخ رو داره اگه تاريخ رو به صورت كوتاه شده مثل 87/6/5 هم نمايش بده خيلي بهتره البته اينو ميشه به راحتي در تنظيمات به كامپوننت اضافه كرد اين مورد در هنگام طراحي برنامه خيلي به درد مي خوره و بهتره 
اين رو هم بگم كه قبلا خيليا از اين كامپوننتها ساختن مثل FarDate2005 ولي همش ناقص بوده اميدوارم شما كار خودتون رو كامل كنيد

----------


## mehdi.mousavi

> سلام یعنی هیچکی تستش نکرد ببینه اشکال هاش چیه.؟!!


سلام.

1. فکر میکنم از Off ِScreen DC ها استفاده نکردین، به همین دلیل فوق العاده بد Refresh میشه.

2. اگر قرار نیست فونت تغییر کنه، باید Property اش ReadOnly بشه نه اینکه من برم تغییر بدم و کنترل بهم بریزه.

3. اگر کنترل قرار نیست بصورت عمودی تغییر سایز بده، باید اینو تو Designer بهش دیکته کنید که کادری که در Designer به کاربر نشون میده، متناسب با این ایده باشه.

4. اگر اشتباه نکنم هر روز رو با یک Button نشون دادید، که این کار باعث اتلاف Resource ها (بیجهت) میشه.

5. حداقل به یک Property نیازه که بشه تاریخ رو Get/Set کرد.

6. باید یک Event ای وجود داشته باشه که تغییر تاریخ رو به Client گزارش بده!

پاورقی: وارد جزییاتش نمیشم، مثلا اینکه چرا این کنترل یه Container Control هست و ...

----------


## __H2__

سلام
من هم دیدم



> ... چرا این کنترل یه Container Control هست...


به نظر من که خیلی مهمه.

این کنترلر به ظاهر واحد است، ولی در زمان بارگذاری بیش از 80 اشاره گر از ویندوز میگیرد.
یعنی خیلی سنگین است و با لود این کنترلر به ظاهر تکی، در واقع ما بیش از 80 کنترلر را در یک لحظه برنامه لود کرده ایم!!!!!

کنترلرهای این تیپی خود ویندوز بیشتر روی کارهای گرافیکی GDI تمرکز دارند.

----------


## mostafaaa

خوب با سلام دوباره خدمت اساتید .
سعی کردم بعضی از اشکالات رو برطرف کنم و تمامی Button ها رو حذف کردم تا حدالامکان از کنترلهای کمتری استفاده کرده باشم . روی اینترفیسش هم خیلی کار کردم . یه پروپرتی برای اینکه تاریخ رو به صورت Long یا Short نشون بده اضافه کردم. بازم منتظر نظرات سازندتون هستم.
1.jpg
2.jpg
3.jpg
4.jpg
اینم فایل Dll
ضمیمه 22484

----------


## __H2__

سلام



> سعی کردم بعضی از اشکالات رو برطرف کنم و تمامی Button ها رو حذف کردم تا حدالامکان از کنترلهای کمتری استفاده کرده باشم . روی اینترفیسش هم خیلی کار کردم . یه پروپرتی برای اینکه تاریخ رو به صورت Long یا Short نشون بده اضافه کردم. بازم منتظر نظرات سازندتون هستم.


دانلود کردم، از قبل بهتر شده.
==============
حقیقتش نیت نداشتم این مطلب پست را بدهم، ولی ایثارهای آقای mostafaaa ما را هم متحول کرد.
من یک کنترلر قدیم داشتم که چندباری در سایت گذاشته بودم، ولی سرشار از ایراد و باگ بود.
حدود یک هفته یا ده روز قبل یکی از دوستان نزدیکم همین را خواست و من هم مجبوراً سروسامانی به کدش دادم و الآن تقریباً باگ مشخصی ندارد.
*البته قیافه اش شاید بد باشد ولی ایراد و باگهایش رفع شده، دوستان اگر باگ و ایراد و کاستی هم دیدند،*
*قبلاً ارزشش را نداشت ولی حالا خوشحال میشوم، اطلاع دهند تا رفعش کنم، با pm که تاپیک جناب mostafaaa را هم تصرف نکنیم!*


- ارتفاع کنترلر غیر قابل تغییر است و به فونت بستگی دارید عین TextBox های تک خطی و ComboBox و...

- با خصوصیت Format، متن نمایشی در کنترلر میتواند هر فرمتی داشته باشد، و طبق قوانین فرمت تاریخ میلادی کار میکند و قابل تغییر است.
مثلاً "yyyy/MM/dd" برای "1387/06/09" یا "yyyy/M/dd" برای "1378/6/09" یا "dddd d MMMM yyyy" برای "شنبه 9 شهریور 1387" و...

- متن مورد پذیرش و قابل تایپ در ورودی هم میتواند تقریباً هر فرمتی داشته باشد.
"1378/6/9" یا 9"-6-1378" یا "1378-6-9" یا "9 شهریور 1378" و...
(اگر متن شامل نام روز هفته باشد، مبدل به مشکل میخورد و تبدیل انجام نمیشود.)

- سه خصوصیت برای برگرداندن و ست کردن تاریخ دارد.
Value که نوع Date است یا همان System.DateTime
IrValue که نوع جدید IrDate است که کپی کامل کاملی از System.DateTime است ولی به صورت شمسی، یعنی هیچ متد و قابلیتی در System.DateTime نیست که در IrDate هم نباشد، حتی متدهای سری XXParseXX .
DbValue که نوع Object است و برای Binding طراحی شده و در کدنویسی عادی Hidden است ولی در DataBindings دیده میشود.
برای set کردن Date و IrDate و String و DbNull را میگیرد ولی برای get فقط Date و DbNull پس میدهد، ایده آل برای binding.

از نظر وراثتی و مجتمع بودن هم تمام Property های فوق برای عمل set کردن از متد Protected SetValueCore استفاده میکنند.
و برای سریالی شدن در designer هم فقط و فقط خصوصیت Value سریالی میشود و چندگانگی وجود ندارد.

خصوصیت IrValue که از نوع IrDate میباشد، برای خود ویراستار مجزا و مستقل دارد
(اگر متوجه نشدید، سعی کنید خصویت IrValue را در پنجره Properties از VS تغییر دهید تا متوجه منظورم شوید.)


- عموم خواص TextBox ها هم اینجا وجود دارد، مثل HideSelection و Select و SelectionStart و MaxLength و TextAlign و...

- خصوصیت ReadOnly برای قفل ویرایش توسط کاربر.

- با خصوصیت DropDown هم میتوان لیست popup را دستی باز و بسته کرد.

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

- خصوصیت AutoSelect برای انتخاب شدن خودکار متن داخل کنترلر با گرفتن فوکس.

- رویدادهای ValueChanged و DropDownOpening و DropDownOpened و DropDownClosed و رویدادهای متناسب با تغییر property های دیگر.

- با MaxDate و Mindate حداکثر و حداقل تاریخ قابل انتخاب را میتوان مشخص کرد.
و یا با IsSqlServerSmallDateTime میتوان این محدوده را خودکار روی محدوده پذیرش نوع متغییر smalldatetime در SQLServer تنظیم کرد.
(بابا یک property پارتی بازی برای SQLServer که ایراد نداره!)

- از نظر تعداد لود کنترلر هم الگو چنین است.
- یک TextBox برای وسط و نشان دادن و ویرایش 
- یک کنترلر که وراثتی از PickerControl دست ساز است، برای بدنه اصلی و پیاده سازی متدها و رسم حاشیه و دکمه بازشو و...
- یک وراثت از کلاسس دست ساز PopupForm برای نمایش یک فرم به حالت popup عین لیست بازشو combox ها (که البته میشد این را حذف کرد ولی فکر کردم و دیدم حذفش به copy و paste کدها نمی صرفه.)
- یک کنترلر تکی برای نمایش کل تقویم، سال و ماه و روز و... همه در این کنترلر واحد و با دستورات مستقیم +GDI ترسیم میشوند. (نه هیچ نوع button نه هیچ نوع label)
- یک منو 12 آیتمی هم برای نمایش ماه های سال وجود دارد.
سرجمع، چهار کنترلر و یک منو مادر.

- تمام Properties ها هم در مقابل خطای چرخه بینهایت و StackOverflow محافظت شده اند.

البته متاسفانه هسته اصلی ترسیم +GDI اش قدیم است و کدش مربوط به چندین سال قبل است که وقت نکردم آپدیت اش کنم و همین مسئله از نظر برخی دوستان سبب قشنگ نبودن کنترلر شده.

*ولی همواره تجربه ثابت کرده، بهترین کدها هم در شرایط خاص و پیش بینی نشده به مشکل میخوردند،*
*یکبار دیگر درخواست میکنم، هر کس اگر به مشکل یا باگی برخورد کرد، لطف کنه و شرایط وقوع و متن خطا را برایم pm کنه.*

دانلود مستقیم

----------


## saman_itc

دوست عزیز h2سلام از کمپوننت خوبت متشکرم من اولین کامپوننتی که کذاشته بودی را فقط دیدم الان هم اون دو تا دیگه رو دانلود کردم هنوز اونا رو ندید م اما یه عیبی که اولی داره اینه که تاریخ پیش فرض را سال 86 میزنه اگه پیش فرض تاریخ سیستم باشه بهتره . 
و همچنین یک button برای تاریخ امروز داشته باشه بهتره
امیدوارم هر روز بهتر بشه.
قربونت.    سامان

----------


## __H2__

سلام



> ... هم اون دو تا دیگه رو دانلود کردم هنوز اونا رو ندید م اما یه عیبی که اولی داره اینه که تاریخ ...


این اولی و دومی کی اند؟ فکر کنم منظورتان کنترلر غیر بازشو اش باشد که من در بالا هم توضیحی نداده ام.
من توسیه میکنم از نمونه بازشو استفاده کنید.
چون کدهای این نمونه تماماً در همین هفته های قبل نوشتم و اشکال یابی اش را تمام کردم و مشکلی ندارد.
ولی ان نمونه خام معمولی، بیش از 90 در صد کدهایش مربوط به چندین سال قبل است که همان زمان هم وقت نشد، کاملش کنم و الآن هم با فونت و ابعاد هم مشکل دارد.

ولی خدایی این جدیده باز شو را محکم با کد قوی درست کنم.




> ... همچنین یک button برای تاریخ امروز داشته باشه ...


در این مورد کاملاً حق با شما است، دوستان دیگر هم توسیه های جالب گرافیکی دیگر داشتند ولی متاسفانه این پیشنهاد های گرافیکی بر میگردد به همان کنترلر معمولی غیر بازشو که ارزش ترمیم را ندارد.
مدتی است که دارم کنترلر جدیدی مشابه همان قدیمی با کد بهتر و قوی تر و باز هم تماماً GDI و با گرافیک خیلی بالاتر از صفر درست میکنم که میتواند با تنظیم Property دو button در زیرش داشته باشد، یکی برای NULL و یکی برای Today.
یا مثلاً امکان تمایز استایل یک روز خاص را هم دارد(برای تعطیلی ها)
و...
و...

ولی چون فعلاً چندان در شرکت نیاز نداریم، من هم وقتی برای تکمیلش ندارم.

با کمال میل و با تشکر از دوستان، نظرتان گرافیکی را حتماً یادداشت میکنم ولی فعلاً نمیتوانم پیاده سازی کنم.
اما نظرت غیر گرافیکی میتوان سریع درست کنم، مثلاً



> که اولی داره اینه که تاریخ پیش فرض را سال 86 میزنه


در مورد اون اولی زیاد وقت نگذاشتم و همچنان پیشنهاد میکنم استفاده نکنید
ولی این را متوجه نشده بودم، حتماً چک میکنم و فوراً حلش میکنم.

ممنون و موفق باشید.

----------


## __H2__

سلام



> ... اینه که تاریخ پیش فرض را سال 86 میزنه اگه پیش فرض تاریخ سیستم باشه بهتره ..


چک کردم، همچین مشکلی نداشت؟! مشکل داره ولی این مشکل را ندارد.
من حدس میزنم شما دارید از یک dll دیگر و قدیمی تر استفاده میکنید.

نمونه فوق که گذاشتم گرچه فقط مثال IrDateTimePicker را دارد ولی dll داخلش چند کنترلر دیگر هم دارد، اگر AddToolbar کنید یا در ObjectBrowse نگاه کنید میبینید.
(از نسخه های قبلی استفاده نکنید.)
که چون ربطی به بحث تاپیک ندارد، به اختصار کنترلرها را بیان میکنم.
IrDateTimePicker (تقویم بازشو)
IrMonthCalendar (تقویم معمولی مد نظر شما)
MovableSizablePanel (پنل قابل حرکت در runtime)
MovableSizableUserControl (یوزر کنترلر قابل حرکت برای وراثت)
MultiColumnComboBox (کامبو چند ستونه)
SeparatorLine (یک Label و خط، که با تغییر AutoSize معلوم میشود.)
SpecialButton (دکمه های ویژه ویندوز که با Style تغییر میکند)
SpinnerBox (تصویر متحرک و قابل چرخش)
SqlServerConnectionStringEditor (ویراستار ConnectionString)
WatchBox (ساعت عقربه ای)
...
...

----------


## Farshad_sh

سلام دوست عزیز. از زحمتی که کشیدی وافعا تشکر میکنم.
راستش من نتونستم این کامپوننت رو توی ویژوال استودیو 2008 import کنم. آیا روش خاصی داره یا اینکه با دات نت 3 سازگار نیست؟

----------


## mostafaaa

منظورتون کدومه ؟
کامپوننت آقای H2 یا مال من؟

----------


## __H2__

سلام



> راستش من نتونستم این کامپوننت رو توی ویژوال استودیو 2008 import کنم. آیا روش خاصی داره یا اینکه با دات نت 3 سازگار نیست؟


هم کنترلر جناب mostafaaa و هم آن نمونه در پیت برای من، هر دو با دات نت 2 درست شده و راه استفاده یکسانی دارند.

*ساده ترین* راه ان است که در زمان طراحی فرم روی Toolbar راست کلیک کنید و گزینه ChooseItems را انتخاب کنید سپس Browse را بزنید و dll را بدهید تا کنترلر به Toolbar تان اضافه شود، بعدش را هم که میدانید ...

----------


## mostafaaa

خوب دوباره ما برگشتیم 
توی این مدت یه مقداری باز روی این کنترل کار کردم که امکاناتش به شرح زیره
3.jpg
اضافه کردن Smart Tag جهت استفاده راحتتر از کنترل و قرار دادن Property های پر کاربرد داخل اون
1.jpg
قابلیت انتخاب تاریخ پیشفرض با استفاده از Mouse و کاملا شبیه کنترل DateTimePicker خود دات نت
2.jpg
دارای یک ایونت به نام DateChange که در زمان تغییر تاریخ فراخوانی میشه
دارای یک Property برای Set و Get کردن تاریخ.

اینم خود کنترل
ShDateTimePicker.rar

البته اینم بگم که درصد GDI+ رو هم خیلی بالا بردم و فکر میکنم سرعتش خیلی بهتر شده.
منتظر نظرهاتون هستم

----------


## Morteza_s

آقا خسته نباشی، خیلی دمت گرم
واقعآ جای خالی یک DateTimePicker شمسی خوب احساس می شد
 اگه شما رو نداشتیم چیکار می کردیم!

خیلی بهتر شده مخصوصآ سرعت لودش که عالیه
بعلاوه امکانات جدیدش که خود شما نام بردی

چند تا پیشنهاد برای بهتر شدن کنترل:

1- امکان اسکرول کردن روز، ماه و یا سال رو بوسیله دکمه وسط ماوس داشته باشه و یک Property هم برای انتخاب روز، ماه و یا سال
یعنی وقتی کنترل باز میشه با چرخوندن دکمه وسط ماوس بشه ماه و یا روز رو اسکرول کرد

2- وقتی که روی متن پایین کنترل کلیک می کنیم انتخاب روی شماره امروز قرار میگیره
به نظر من بهتر اینه که وقتی روی اون متن کلیک می کنیم کنترل بسته بشه و تاریخ امروز داخل کادرش قرار بگیره

3- یه مشکلی هم ظاهرش داشت، وقتی من فونتش رو به Tahoma و اندازه 6 تغییر دادم اینطوری شد:

اون قسمت اضافه پایینش زیاد جالب نیست، که اگه برطرف بشه خیلی عالی میشه

4- نمی دونم متوجه این موضوع شدید یا نه که وقتی با ماوس روی کنترل حرکت می کنیم، شماره های روز با یه تاخیری به حالت انتخاب در میاد و مثل قبل سریع انتخاب نمیشه، در واقع وقتی ماوس در حال حرکت باشه شماره ها انتخاب نمیشه و باید روی یک شماره توقف کنیم تا به حالت انتخاب در بیاد
اگه مثل قبل بشه خیلی بهتره

اینم از نظرات ما
امیدوارم که این زحماتتون ادامه داشته باشه و این کنترل روز به روز بهتر بشه

موفق باشید

----------


## bardia goharbin

مصطفی جان عالیه، همینطوری ادامه بدی این کنترل عالی میشه. ولی لطفا یک Version درنظر بگیر که هرچقدر جلو میری Version جدیدتر رو اینجا بگذاری و نام فایل مثل قبلی نباشه

فعلا در نگاه اول چند تا نظر :

0 - اول از همه اینکه چرا درون این کنترل نمیتوان بصورت دستی تاریخ را وارد کرد؟ اگر بتوان بصورت MaskedTextBox بتوان تاریخ را نیز بصورت دستی وارد کرد عالیست
1 - چرا تاریخ صفرگذاری نمیشه؟ (مثلا 1387/01/09 به جای 1387/1/9) بهتره صفرگذاری بشه تا بعدا در دیتابیس و Sort دچار مشکل نشیم
2- تاریخ بصورت کوتاهتر VeryShort درنظر گرفته شود. مثل 87/01/01
2 - فونت پیش فرض را به نظر من Tahoma قرار بدی خیلی بهتره، Tahoma 8 که نیاز به نصب فونت نباشه.
3 - خروجی DateTimePicker1.DateValue اگر به سه صورت VeryShort و Long و Short درنظر گرفته شود بهتر است، یعنی هم بتوانید از نوع عددی و هم حروفی آن استفاده کنیم
4 - یک مشکل در اکثر DateTimePicker ها وجود داره اینکه که برای باز کردن تقویم حتما باید توسط ماوس اینکار انجام بشه ولی اگر مثل ComboBox توسط کلید Alt+ArrowDown هم بتوان کنترل را باز کرد فوق العاده عالی میشه، چون کاربر وقتی داره دیتا وارد میکنه سریعتر کار میکنه، اگر استفاده از کل قابلیتهای این کنترل بدون استفاده از ماوس انجام پذیر باشه بهترین میشه.
5- اگر رنگ روز جاری به رنگ مشخص تری مثل قرمز یا سبز تغییر یابد بهتر است.
6- وقتی رنگ Background را تغییر میدهیم رنگ Background تقویم تغییر نمیکند (البته زیاد مهم نیست)
7- دمت گرم ...

----------


## mostafaaa

با تشکر از دوستان خوبم بابت نظراتشون. 
در اولین فرصت سعی میکنم باقی اشکالاتش رو رفع کنم .

----------


## Mojtaba shabani

سلام Mostafaaa دوست عزیز من کامپوننت شما رو تست کردم ولی یه ایراد داره که یک Property برای Get/Set کردن محتوای تاریخ نداره مثلا نمیشد خاصیت text رو به جایی دیگه فرستاد یا مثلا محتوای تاریخ یعنی 19/7/87 رو به یه label یا به DataBase ارسال کرد امیدوارم متوحه منظورم شده باشی منتظر کارای خوبت هستیم

----------


## Mojtaba shabani

راستی چرا  Datevalue به صورت پیش فرض Null هستش یه Property به نام Text باید باشه که به متن داخل combo اشاره کنه البته باید Get/Set باشه

----------


## mostafaaa

همون DateValue که نام بردید برای Set/Get کردن تاریخ هستش.

----------


## Mojtaba shabani

Mostafaaa ببین تا زمانی که ما تاریخی رو انتخاب نکنیم محتوای DataValue Null هستش بعد از اینکه تاریخی انتخاب میشه محتوای DateValue میشه تاریخ انتخاب شده

privatevoid Form1_Load(object sender, EventArgs e)
{
MessageBox.Show(dateTimePicker1.DateValue);
}




privatevoid button1_Click(object sender, EventArgs e)
{
MessageBox.Show(dateTimePicker1.DateValue);
}

----------


## green_flow

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

----------


## mostafaaa

سلام دوست من 
گویا آخرین فایلی که آپلود کرده بودم پاک شده.
در هر صورت دوباره آپلودش کردم و یکسری از مشکلاتش رو هم برطرف کردم که میتونی از این لینک دریافتش کنی.
ShDateTimePicker.rar

----------


## VARAN C160

سلام مصطفی جان و خسته هم نباشی. خیلی ممنون از زحمتات. مصطفی جان یک مشکل خیلی بزرگ توی این کنترلی که درست کردی وجود داره و اونم اینه که وقتی توی Clip Board یک متنی از قبل وجود داشته باشه اگر روی جایی که تاریخ رو نشون میده راست کلیک کنی گزینۀ Paste وجود داره و اگه Paste رو بزنی همون متن توی Clip Board توی اونجا کپی میشه و این به نظرم خیلی بده !!! باید طوری باشه که کاربر یا اجازۀ Paste کردن نداشته باشه، یا اگرم تونست Paste کنه حتماً در فرمت تاریخ باشه !!! البته با Paste کردن متن توی Clip Board کنترل مقدار قبلی تاریخ رو حفظ میکنه اما مشکل اینجاست که وقتی فرم داره لود میشه مقدار کنترل NULL رو داره !!!! اگه این دوتا مشکل رو برطرف کنی عالی میشه !!! ضمن اینکه ی پیشنهاد دارم و اونم اینکه می دونم که برای ی برنامه نویس خیلی زور داره بخواد Source برنامۀ خودشو بده به کسی اما من فکر میکنم اگه سورس برنامه رو بزاری روی سایت همۀ بچه هایی که اینجان بخشایی که به نظرشون میرسه درست میکنن و مرتب این کامپوننت بهینه تر میشه !!!! بازم ممنون از زحماتت. موفق باشی. خدانگهدار

----------


## tami64

> خوب با سلام دوباره خدمت اساتید .
> سعی کردم بعضی از اشکالات رو برطرف کنم و تمامی Button ها رو حذف کردم تا حدالامکان از کنترلهای کمتری استفاده کرده باشم . روی اینترفیسش هم خیلی کار کردم . یه پروپرتی برای اینکه تاریخ رو به صورت Long یا Short نشون بده اضافه کردم. بازم منتظر نظرات سازندتون هستم.
> 1.jpg
> 2.jpg
> 3.jpg
> 4.jpg
> اینم فایل Dll
> ضمیمه 22484


این فایل که اصلا وجود نداره
اگه بود استفاده میکردیم
www.taymaz.ir
یه سری هم به اینجا بزنید
بد نیست

----------


## tami64

> سلام
> 
> دانلود کردم، از قبل بهتر شده.
> ==============
> حقیقتش نیت نداشتم این مطلب پست را بدهم، ولی ایثارهای آقای mostafaaa ما را هم متحول کرد.
> من یک کنترلر قدیم داشتم که چندباری در سایت گذاشته بودم، ولی سرشار از ایراد و باگ بود.
> حدود یک هفته یا ده روز قبل یکی از دوستان نزدیکم همین را خواست و من هم مجبوراً سروسامانی به کدش دادم و الآن تقریباً باگ مشخصی ندارد.
> *البته قیافه اش شاید بد باشد ولی ایراد و باگهایش رفع شده، دوستان اگر باگ و ایراد و کاستی هم دیدند،*
> *قبلاً ارزشش را نداشت ولی حالا خوشحال میشوم، اطلاع دهند تا رفعش کنم، با pm که تاپیک جناب mostafaaa را هم تصرف نکنیم!*
> ...


مرسی خیلی چیگر طلایی
عالی بود
یه سری هم به من بزن
www.taymaz.ir

----------


## navidkhalilian

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

----------


## sari-1369

من برای ثبت تاریخ فیلد رو از نوع nvarchar(10) تعریف میکنم و هیچ مشکلی پیش نمیاد و به راحتی میشه تاریخ شمسی درج کرد.

----------


## karim orooji

حالا اين كامپونت چطوري بايد استفاده كرد

بلند نيستم كه چطور يك فايل dll در برنامه بكار ببرم


راهنمايي

----------


## __H2__

سلام



> ... من وقطی می خوام تاریخ ها رو توی یک datagrid نمایش بدم همه میلادی هستند.


در خصوص جداول gridview من یک کامپونت دیگر مخصوص اینکار نوشته ام، میتوانید از زیر نمونه کد را دانلود کنید.
http://h02.ir/Download.aspx?File=Dat...DateColumn.zip




> بلند نيستم كه چطور يك فايل dll در برنامه بكار ببرم


همین سوال در پست 11 همین تاپیک قبلاً پرسیده شده! و چند پست پایین تر هم جواب داده شده.

----------


## saeid69

دانلود نمیشه که

----------


## raven1997

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

----------


## f_pakzad

به خاطر سخاوتی که در دانشتون دارید بسیار متشکرم.
اما چند نکته:
1-هیچ کنترلی روی کاراکتر وارد شده توسط کاربر نداره.بهتر بود فقط اجازه میدادی کاربر، عدد و اسلش وارد کنه.
2-معتبر بودن تاریخ ورودی رو کنترل نمیکنه مثلا در برابر 12222/55/12 هیچ عکس العملی نداره در حالیکه بهتر بود اصلا نذارید مثلا برای ماه بیشتر از 12 وارد کنه یا حد اقل پس از اینکه اشتباه وارد کرد یه هشداری پیغامی چیزی بده
3-فرض کنیم کاربر خودش تاریخ رو وارد کرد مثلا تاریخ سال 66 بعد از اینکه تقویم رو باز میکنه باز هم تاریخ امسال رو میبینه اما بهتر بود فوکوس بره رو تقویم سال66 
4-گر صفحه کلید انگلیسی باشه اصلا کاراکتر نمی پذیره .بهتره به جای این خودتون بیاید  تو کد، صفحه کلید رو به فارسی تبدیل کنید

----------


## raven1997

ممنون می شم اگه کسی کمک کنه.
با تشکر

----------


## f_pakzad

> ممنون می شم اگه کسی کمک کنه.
> با تشکر


https://barnamenevis.org/showthread.php?t=160809

----------


## tabatabaeefar

سلام آقا مصطفي
دستت درد نكنه. خيلي عالي بود.
يه پيشنهاد داشتم:
وقتي هنوز تاريخي انتخاب نشده تاريخ روز نمايش داده ميشه.
اما مقدار DateValue برابر Nothing هست.
باز هم خيلي ممنون.
موفق باشيد.

----------


## Hesamzadeh

اینم یک MounthCalendar فارسی هست گفتم دوستان زیاد دنبالش نگردن
اگه تکراری هست به بزرگی خودتون ببخشید

----------


## mina.net

> اینم یک MounthCalendar فارسی هست گفتم دوستان زیاد دنبالش نگردن
> اگه تکراری هست به بزرگی خودتون ببخشید


سلام دوست عزیز
دانلود کردم کنترل خوبی بود .

خوب از آنجای که فکر می کنم دلت می خواد بیشتر عیبها رو به شما بگیم نه تعریف و تمجید.
1- شما روز رو بزار 30 و ماه رو بزار 12 حالا سال رو بزار 88 برنامه متوقف می شه. لطفا به ترتیب انجام بدید. چون برعکس خطا نمی ده.
2- تقویم به نظر خیلی بزرگ می یاد.
3- داخل تقویم اعداد انگلیسی هستند.
4- فکر می کنم بالای تقویم تاریخ رو کامل قرار می دادی خیلی بهتر بود.

البته این به معنی این نیست که کنترل شما بد باشد ولی می تونه بهتر باشه.
منتظر نظرات کارشناسانه شما در مورد کنترل datetimepiker خودم هم هستم. لینکش تو امضاء من هست.

موفق باشید.

----------


## mina.net

سلام دوست عزیز جناب mostafaaa 
کنترل بسیار جالبی بود . بخصوص امکان بسیار جالبی که برای انتخاب سال و ماه گذشتی.
فقط 1-2 نکته : فونتهای که استفاده کردی خیلی جالب نیست. با صفحه کلید تقویم باز نمی شه و امکان تایپ مستقیم نداره.

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

 البته همونطور که گفتم کنترل شما نقاط قوت بسیار زیادی هم داره.
منتظر نظرات کارشناسانه شما در موردکنترل datetimepiker خودم هستم. لینکش تو امضاء من هست.

موفق باشید.

----------


## tami64

من اينو كاملترش كردم قبلا فقط ماه عوض ميشد ولي من تغيير سالش رو هم گذاشتم ميتونيد از اين لينك دانلود كنيد


http://www.taymaz.ir/download_DateTimePicker+شمسي.html

 :چشمک:

----------


## sari-1369

حذف شــــــد

----------


## raven1997

پس زود باش ما منتظریم :گیج:

----------


## hamid.afzalnejad

اگر کسی Smart Device بلده به سوال مربوطه در سوالات جواب بده. خیلی فوری است.

----------


## mdssoft

ورژن Javascript : 

http://mds-soft.persianblog.ir/post/121/

----------


## shahab66

اگه ممکنه لینک بزارید دوباره
لینک های غیر فعالن
ممنون

----------


## shazde_f

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

----------


## morteza_carefree

سلام 
اگه زحمتی نیست میشه
نحوه اضافه کردن و استفاده رو هم بنویسید

----------


## ostovarit

> دانلود


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

طریقه استفاده از DatetimePiker در یکی از ستونهای گرید ویو به چه صورت هست؟
لطفا من رو در این مورد راهنمایی بفرمایید...

----------


## a1b2uu

کومپوننت شما value نداره نمیدونم تو sql  چه طوری ذخیرش کنم لطفا راهنمایی کنید

----------


## SirM2X

آقا حیفم اومد از کامپوننتت استفاده کنم ولی هیچی نگم!

خیلی کارت درسته.  :تشویق: 
یه مشکل عجیب داره که وقتی روی فرم میاد و یوزر باهاش هیچ کاری نکنه، DateValueش نال میمونه و توش مقدار تاریخ انتخاب شده ش نیست!




> کومپوننت شما value نداره نمیدونم تو sql  چه طوری ذخیرش کنم لطفا راهنمایی کنید


از خاصیت DateValueش بگیر دوست عزیز

----------


## یک دوست

> آقا حیفم اومد از کامپوننتت استفاده کنم ولی هیچی نگم!
> 
> خیلی کارت درسته. 
> یه مشکل عجیب داره که وقتی روی فرم میاد و یوزر باهاش هیچ کاری نکنه، DateValueش نال میمونه و توش مقدار تاریخ انتخاب شده ش نیست!
> 
> 
> 
> از خاصیت DateValueش بگیر دوست عزیز


آره منم می خوام از این کامپوننت استفاده کنم منتها همین مشکل رو که دوستمون گفتن داره و نال هست یعنی وقتی داره تاریخ روز رو نشون می ده پس کاربر که دیگه اون رو تغیر نمی ده که خب اینجوری هم که داره نال برمیگردونه و فایده ای نداره بنابراین اگر کسی راه حلی بلده به ما هم بگه خوشحال می شیم

----------


## tami64

> آره منم می خوام از این کامپوننت استفاده کنم منتها همین مشکل رو که دوستمون گفتن داره و نال هست یعنی وقتی داره تاریخ روز رو نشون می ده پس کاربر که دیگه اون رو تغیر نمی ده که خب اینجوری هم که داره نال برمیگردونه و فایده ای نداره بنابراین اگر کسی راه حلی بلده به ما هم بگه خوشحال می شیم


سلام 
کدوم رو دانلود کردید؟
اونی که taymaz.ir هست اون رو؟

----------


## __H2__

سلام
مدتهاست که روی تقویم جدیدی کار کرده ام و چندماهی است نسخه آزمایشی اولیه از آن را استفاده میکنم.
دوستان در صورت تمایل میتوانند (همان لینک نسخه قدیم) این نسخه را دانلود کنند:
http://support.h02.ir/fwlink/?LinkId=1002976157

استایل کنترلر را بنابر تجربیات موفق قبلی (از جمله ساعت عقربه ای) کاملاً قابل تغییر و برپایه تصویر گذاشته ام.
فایل الگوی مورد نیاز 24 تکه دارد که 21 تکه آن خود در زمان ترسیم با یک الگوریتم خاصی به صورت 9 تکه ترسیم میشوند.
(
3 پیکسل از حاشیه کنار (هر یک از این 21 تکه) در 4 جهت و 4 گوشه شکسته شدن و بدون بزرگ نمایی ترسیم میشود و مابقی (کسر 6 پیکسل) باقی مانده کشیده میشود تا ناحیه مورد نظر را پر کند.
)

کنترلر هنوز آماده نیست و قصد معرفی آن را (حداقل در این زمان) نداشتم.
ولی شالوده کلی پردازش و انیمیشن و هسته گرافیکی به خوبی کار میکند.
تمام ارتباط کنترلر با ترسیمات مستقیم +GDI است و کنترلر شامل بارگذاری هیچ Label یا Button اضافه ای نمیشود که UI سبک و سریعی را میسازد.

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


در نمونه دانلودی تمام ظاهر آنچه که خواهید دید ناشی از دو فایل Style.png و Background.png است که به خصایص StyleImage و DropDownBackgroundImage تخصیص داده شده اند.

برای پیاده سازی کامل Binding هم میتوانید از DbValue استفاده کنید.
خصایص دیگر مثل Format و Min/MaxDate و NullText و IsNull و AllowNull و TextAlign و Value و IrValue و ... هم موجود است.

فعلاً فقط نسخه بازشو و نسخه عادی آن موجود است.
موفق باشید.

----------


## یک دوست

> سلام 
> کدوم رو دانلود کردید؟
> اونی که taymaz.ir هست اون رو؟


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

----------


## mahboube

سلام.دوستاني كه استفاده كردند كدوم يكي از اين كنترل ها تاريخ ميلادي رو هم بر ميگردونه؟ممنون

----------


## یک دوست

> آره منم می خوام از این کامپوننت استفاده کنم منتها همین مشکل رو که دوستمون گفتن داره و نال هست یعنی وقتی داره تاریخ روز رو نشون می ده پس کاربر که دیگه اون رو تغیر نمی ده که خب اینجوری هم که داره نال برمیگردونه و فایده ای نداره بنابراین اگر کسی راه حلی بلده به ما هم بگه خوشحال می شیم


 دوستان من در جواب سوال خودم یه راه حلی رو پیدا کردم این رو می زارم تا هر کسی که خواست استفاده کنه تا بعدا انشاالله صاحب اثر خودش بیاد جواب درست رو بده
پس با اجازه

اولا این فانکشن رو تعریف کنین

 Public Function ir_Date() As String
        Dim irdt As Date = Date.Now
        Dim Year, Month, Day As String
        Dim Glob As New Globalization.PersianCalendar
        Year = Glob.GetYear(irdt)
        Month = Glob.GetMonth(irdt)
        Day = Glob.GetDayOfMonth(irdt)
        ir_Date = Year & "/" & Month & "/" & Day
    End Function

این تاریخ جاری سیستم رو به شمسی بر می گردونه
حالا کافیه شما توی فرم لود بنویسید
datetimepicker1.DateValue = ir_Date()
این جوری فرم که لود بشه تاریخ روز به عنوان تاریخ پیش فرض این کامپوننت قرار می گیره و اگر هم کاربر باهاش کاری نداشته باشه چون این مقدار تنظیم شده دیگه نال بر نمی گردونه
این رو داشته باشین تا انشاالله صاحب اثر بیاد راه حل درستش رو بگه

----------


## mahboube

آقاي يك دوست!
اين كامپوننت غير از datevalue شكل ديگه اي تاريخ رو برنمي گردونه؟
روز و ماه وسالش جدا باشه؟

----------


## یک دوست

> آقاي يك دوست!
> اين كامپوننت غير از datevalue شكل ديگه اي تاريخ رو برنمي گردونه؟
> روز و ماه وسالش جدا باشه؟


منظورتون خانم یک دوست بود دیگه نه؟! :لبخند گشاده!: 
اشکال نداره تقصیر شما نیست اشتباه لپی بود :چشمک: 
دوست عزیز باید خدمتون عرض کنم که تا اونجایی که من می دونم دو مدل فقط داده می ده یکی تاریخ یکی هم تاریخ به همراه روز هفته و این حالتی که شما می خواین رو نمی ده
و اگر که تاریخ روز براتون مهمه از همون تابعی که نوشتم استفاده کنید منتها به جای کل تاریخ روز و ماه و سال ازش بگیرید که البته تا یه جائی اش نوشته شده اگر که تاریخ دیگه قراره کاربر انتخاب کنه نهایتا می تونید خروجی این کامپوننت رو که مثلا به صورت 1389/10/5 هست رو با کمک تابع split جدا کنید که کار خیلی ساده ای است.
به هر حال موفق باشید :لبخند:

----------


## omid_programer

سلام میگم من بلد نیستم از این استفاده کنم میشه یکی کمک کنه لطفا :ناراحت:

----------


## masoud_cpu

سلام. 
خب عزیزان 6 ثفحه تایپ کردید دست گلتون درد نکنه اما یکی هم بیاد بگه از این اصلا چطوری استفاده کنیم . نمیتونم تو toolbox بیارمش. لطف فرموده راهنمایی کنید.

----------


## msd163

سلام به همه
آق مصطفی دستتون درد نکنه
فقط اگه میشد تو datetimeticker به صورت مستقیم (با صفحه کلید) تاریخ رو وارد کرد بهتر میشد. یعنی اینکه نیاز نباشه حتما از تقویم استفاده کرد.
اما:



> خب عزیزان 6 ثفحه تایپ کردید دست گلتون درد نکنه اما یکی هم بیاد بگه از  این اصلا چطوری استفاده کنیم . نمیتونم تو toolbox بیارمش. لطف فرموده  راهنمایی کنید.


توی toolsbox  راست کلیک کن. choose item رو بزن و از tab دات نت روی broswer  کلیک کن و فایل dll رو انتخاب کن.
یه راه دیگه هم داره:
1.فایل dll رو توی رفرنست(referensces) اضافه کن. 
2.بعد برو توی دیزاینر فرمت (با کلیک روی InitializeComponent که تو قسمت کدنویسی است و زدن go to definition میتونی دیزاینرو باز کنی)
3. آخر کدها یعنی بعد از  #endregion , همونجایی که privatre ها تعریف شده اند این خط کد رو اضافه کن   :      private ShDateTimePicker.DateTimePicker dateTimePicker1;
4. حالا برو بالا تو قسمت تابع    private void InitializeComponent() و قبل از  کد  this.SuspendLayout(); اینو اضافه کن :  this.dateTimePicker1 = new ShDateTimePicker.DateTimePicker();
5. برو پایین و محل خاصیتهای فرمتو پیدا کن.اگه اسم فرمت form1 باشه باید دنبال 
// 
// Form1
// 
بگردی.وقتی پیدا کردی این خط رو اضافه کن :   this.Controls.Add(this.dateTimePicker1);


حالا اگه بری تو فرمت datetimepicker اضافه شده.

----------


## civick

با تشکر از کامپونت های دوستان
جناب آقای H02
من وقتی برنامه ام را کامپایل می کنم GHNet.win  از  reference هام حذف   می شود و error
 'GHNet.Windows.Forms.GlobalizationDateTimePicker' is not defined 
را می دهد لطفا راهنمایی کنید

----------


## civick

ممنون از این همه جواب دوستان
خودم پیدا کردم مشکل از فریم ورک بود
از fram work client profile به fram work تبدیل کردم درست شد

----------


## مهدی فضلی

آقا مصطفی سلام
واقعا نمیدونم چطور تشکر کنم
من تازه وارد سایت برنامه نویس شدم ولی با وی بی دات نت آشنایی دارم
از این کامپونتت اشتفاده کردم در برنامه ام تنها مشکلی که من تا الان دیدم همون نول بودن مقدار اولیه است یعنی کاربر حتما باید مشخص کنه

----------


## neda88

الان این خیلی خوب کار میکنه فقط مسئله ای که داره اینه که maximum date نداره

----------


## iranpcl

سلام
آقا دت تایم پیکری که زحمتش رو کشیدید قابل اجرا برای wpf هم هست(با دات نت 4)؟؟؟

----------


## pooria2c

سلام آقا می گی چه جوری از این کامپوننت استفاده کنم 
من در قسمت references اون و add کردم ولی چه جوری استفاده کنم 
توی tool box میاد؟
یا باید به صورت کد نویسی اون و به فرمم اضافه کنم؟؟
لطفاً من و راهنمایی کنید

----------


## mostafaaa

ورژن جدید کمپوننت
Just drag it to toolbox

----------


## neynavaz

اقا این با دات نت 4 مشکل داره که!

----------


## raminsoft

با سلام 
و ممنون بخاطر بروز کردن کامپوننت
متاسفانه وقتی که به پروژه رو Sign میکنیم ( Sign the assembly ) موقع اجرا یا کامپایل این خطا رو میده :

Assembly generation failed -- Refrenced assembly 'PersianDateTimePicker' dose not have a strong name

ممنون میشم این مشکل رو نیز رفع نمایید.

----------


## web_user

سلام
اگه بخوايم مقدار تاريخ را به وسيله ديتا گريد روي اين كنترل لود كنيم چطور ميشه اين كار رو انجام داد؟مرسي

----------


## magic69

دوستان این کامپوننت با دات نت 4 هماهنگ هست.فقط حواستون باشه پروژتون رو روی دات نت 4 بزارین و نه دات نت 4 کلاینت

----------


## shift-delete

واسه دلفی همچین کامپوننتی هست؟

----------


## aloneman2005

میشه اینجا سورس دانلود کرد یا نه ؟ لااقل سورس بزارید.

----------


## hichkasmehrdad

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

----------


## mdssoft

آخرین ورژن DateTimePicker فارسی میلادی
https://github.com/Mds92/MD.Bootstra...DateTimePicker

MdPersianDateTimePicker.jpg

----------


## hichkasmehrdad

توی TOOLBOX روی گزینه GENERAL راست کلیک کنین و گزینه choose items رو انتخاب کنین و صبر کنین که کامپوننت های پیشفرض بارگذاری بشن بعد گزینه browse رو انتخاب کنین و فایل .dll رو که دانلود کردین پیدا کنین و ok بزنین خودش به general اضافه میشه و میتونین ازش استفاده کنین

----------

