# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  کنترل انتخاب تاریخ و زمان با پشتیبانی از تاریخ شمسی و میلادی - open-source

## plus

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

DateTimeSelector

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

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

* در زمینه پشتیبانی کامل از موس و کیبرد کمی جای کار داره
چند Screenshot از این کنترل:
DateTimeSelector-3.pngضمیمه 127867DateTimeSelector-1.png
پروژه در Github
دانلود سورس و یا باینری (DLL) از Github 
لینک مطلب کامل در وبلاگ من

* هنوز فرصت به توضیح کامل مشخصات و نحوه استفاده از اون نکردم. سوالاتتون رو میتونید در همین تاپیک یا پست لینک شده در وبلاگ بپرسید.
* ویراست 1.1.2 ارسال شد.

----------


## ghasem110deh

سلام
توی دیتابیس sql که فیلد تاریخش Date هست ... چطور ذخیرش می کنین ؟

----------


## plus

مشخصه Value مقدار تاریخ و زمان انتخاب شده رو از نوع ?DateTime (تقویم میلادی) برمیگردونه و این کار رو برای ذخیره در دیتابیس (فیلدی از نوع DateTime) راحت میکنه؛ این مقدار میتونید به روش‌های مختلف به دیتابیس بفرستید.
نحوه ارسال دیگه بستگی به روش ارتباط با دیتابیس  داره. برای مثال اگه از ADO.NET استفاده میشه میتونید مقدار به عنوان پارامتر به SqlCommand بدین؛ یا اگه از EF استفاده میشه میتونید مقدار DateTime رو به مشخصه Entity مربوطه انتساب بدین.

DateTime? selectedDate = dateTimeSelector1.Value;
...

البته کسانی که قصد ذخیره تاریخ رو به صورت متنی دارن هم میتونن از مشخصه Text و یا GetText برای دریافت و ذخیره مستقیم تاریخ (بدون تبدیل) استفاده کنن.
string selectedDate = dateTimeSeletor1.Text;
string selectedDateInSpecifiedFormat = dateTimeSelector1.GetText("yyyy/MM/dd");

ولی روش اول پیشنهاد میشه.

----------


## Imenam

با سلام و تشکر بابت کامپوننت

اگر فایل dll رو همینجا آپلود می کردین بهتر بود... من که نتونستم از لینک ها فایل دانلود کنم :متفکر:

----------


## plus

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


سلام. ضمیمه پست اول کردم. البته در لینکی که داده بودم کافی بود بر روی دکمه سبز با عنوان datetimeselector-1.0-beta-bin.zip کلیک کنید.

----------


## mehdighofrani

سلام
چرا ارور ....there are no component in را میگیرم موقع ادد کردن؟

----------


## Imenam

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

----------


## ghasem110deh

سلام
می تونیم تو پروژه های فروشی (درآمد زا) استفاده کنیم ؟
البته وقتی منتشر کردین یعنی مشکلی نداره دیگه !

----------


## ghasem110deh

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

----------


## plus

> سلام
> چرا ارور ....there are no component in را میگیرم موقع ادد کردن؟


چه روشی رو استفاده می‌کنید که به این خطا میخورید؟ یک روش جز روش Add کردن، کشیدن فایل DLL از Windows Explorer‌به Toolbox در VisualStudio‌هست. این روش رو هم امتحان کنید.



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


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



> سلام
> می تونیم تو پروژه های فروشی (درآمد زا) استفاده کنیم ؟
> البته وقتی منتشر کردین یعنی مشکلی نداره دیگه !


بله تحت لیسانس MIT هست که محدودیت خیلی کمی برای استفاده کننده داره. شما میتونید با یا بدون تغییر سورس در پروژه‌های فروشی ازش استفاده کنید، تا زمانی که فایل لاینسنی که مربوط به پروژه (و بالای فایل های source هست) رو حذف نکنید.



> سلام
> الان با تاریخ فارسی ذخیره کردم ... حالا واسه نمایش به تاریخ فارسی چیکار کنم ؟


کجا با تاریخ فارسی ذخیره کردین و کجا میخواین نمایش بدین؟
در DataGridView که مقادیر رو به صورت میلادی ذخیره کردین. اگه کلا همه چیز میخواین فارسی کار کنید باید از مشخصه Text‌بجای Value‌ استفاده کنید.

----------


## ghasem110deh

> کجا با تاریخ فارسی ذخیره کردین و کجا میخواین نمایش بدین؟
> در DataGridView که مقادیر رو به صورت میلادی ذخیره کردین. اگه کلا همه چیز میخواین فارسی کار کنید باید از مشخصه Text‌بجای Value‌ استفاده کنید.


توی sql server در فیلد نوع DateTime ....
میخوام توی دیتاگرید ویو هم تاریخ فارسی نشون بده ! (چطور باس تبدیل کرد)
*** قبلا از nVarchar استفاده میکردم واسه تاریخ ... ولی الان فیلد رو DateTime استفاده کردم واسه اختلاف دو تاریخ - جستجو بین دو تاریخ و ...
---------
انگار استفاده از DateTime واسه تاریخ دست و بال آدم رو واسه عملیات رو تاریخ بازتر میکنه !

----------


## plus

> توی sql server در فیلد نوع DateTime ....
> میخوام توی دیتاگرید ویو هم تاریخ فارسی نشون بده ! (چطور باس تبدیل کرد)
> *** قبلا از nVarchar استفاده میکردم واسه تاریخ ... ولی الان فیلد رو DateTime استفاده کردم واسه اختلاف دو تاریخ - جستجو بین دو تاریخ و ...
> ---------
> انگار استفاده از DateTime واسه تاریخ دست و بال آدم رو واسه عملیات رو تاریخ بازتر میکنه !


بله استفاده از DateTime در حالت عادی بهتر بنظر میاد تا استفاده از رشته. کاری که میخواین بکنید خارج از بحث کنترل انتخاب تاریخ هست. شما میتونید در رویداد CellFormatting‌مروبط به DataGridView، تاریخ رو درست قبل از نمایش از یک متغیر DateTime به یک رشته تاریخ شمسی تبدیل کنید. (با استفاده از کلاس PersianCalendar.) جستجو کنید اگه به نتیجه نرسیدید تاپیک جدا بزنید تا بیشتر راهنمایی کنم.

----------


## Saman_12

سلام.
به نظر شما میشه کاری کرد که این کامپونت به نسخه های بعدی .net اظافه شه؟(اگربشه به Microsoft فروخته شه بهتر اگر نشد خالی اظافش کنن هم خوبه)

----------


## plus

> سلام.
> به نظر شما میشه کاری کرد که این کامپونت به نسخه های بعدی .net اظافه شه؟(اگربشه به Microsoft فروخته شه بهتر اگر نشد خالی اظافش کنن هم خوبه)


ُسلام. نه، مایکروسافت به اون بزرگی مشکلی با انجام یک چنین پروژه‌هایی از نظر فنی نداره. مشکل از جای دیگه هست. کنترل DateTimePicker که مربوط به خود NET. میشه در مواردی از این کنترل کاملتر و  با ثبات تره؛ مشکل اصلی با تقویم شمسیه. البته مشکل از دات نت نیست مشکل اصلی از ویندوزه که تا قبل از نسخه 10 از تقویم شمسی پشتیبانی نمیکنه. البته از ویندوز 10 به بعد با پشتیبانی تقویم شمسی در ویندوز، مشکلات محصولات مایکروسافت در مورد تقویم شمسی کاملا حل میشه و نیازی به کنترل اضافی نیست.
این رو هم اضافه کنم که میشه با روش‌هایی مثل Reflection این محدودیت ویندوز که به NET. هم اعمال میشه رو دور زد و کاری کرد که کنترل DateTimePicker تقویم شمسی نشون بده ولی به دلایلی ترجیح دادم یک کنترل مجزا ایجاد کنم.

----------


## Sm_pro

کنترل خوب و کاربردی اما یه سوال دارم اگر یک تاریخ انتخاب بشه آیا رویدادی برای این کنترل وجود داره که تاریخ انتخاب شده رو برگردونه چیزی مثل رویداد TextChanged یا ValueChanged  البته این دو Event وجود دارند اما احتمالا در زمان پیاده سازی کنترل Override نشده اند من با این دو Event نتیجه ای نگرفتم

----------


## plus

> کنترل خوب و کاربردی اما یه سوال دارم اگر یک تاریخ انتخاب بشه آیا رویدادی برای این کنترل وجود داره که تاریخ انتخاب شده رو برگردونه چیزی مثل رویداد TextChanged یا ValueChanged  البته این دو Event وجود دارند اما احتمالا در زمان پیاده سازی کنترل Override نشده اند من با این دو Event نتیجه ای نگرفتم


متد OnValueChanged در کنترل به صورت private وجود داره، به صورت protected virtual در آوردمش، در source موجود در github اعمال شده و در فایل باینری موقع release نهایی اعمال میشه، اگه میخواین الان اعمال کنید میتونید src رو دانلود کنید و خودتون build کنید.
رویداد ValueChanged هم دوباره بررسی به درستی کار میکنه منتها دقت کنید که موقع تایپ فراخوانی نمیشه بعد از رفتن focus از روی یکی از مولفه های تاریخ و یا کل کنترل اعمال میشه. شما چکار میخواین بکنید که به نتیجه نرسیدید؟

----------


## Sm_pro

> متد OnValueChanged در کنترل به صورت private وجود داره، به صورت protected virtual در آوردمش، در source موجود در github اعمال شده و در فایل باینری موقع release نهایی اعمال میشه، اگه میخواین الان اعمال کنید میتونید src رو دانلود کنید و خودتون build کنید.
> رویداد ValueChanged هم دوباره بررسی به درستی کار میکنه منتها دقت کنید که موقع تایپ فراخوانی نمیشه بعد از رفتن focus از روی یکی از مولفه های تاریخ و یا کل کنترل اعمال میشه. شما چکار میخواین بکنید که به نتیجه نرسیدید؟


بله دوست عزیز بعد از این که سورس رو دیدم متوجه شدم که این قسمت که شما اصلاح کردین ایراد این کنترل بود که شما توسط کلمات کلیدی protected virtual جهت رونویسی رویداد اصلاح کردید مشکل رویداد کاربردی ValueChanged حل شد دوستان نیز با استفاده از این رویداد میتوانند بلافاصله بعد از انتخاب مولفه های تاریخ، دسترسی به تاریخ انتخاب شده را داشته و  متد های مورد نیاز جهت اجرا بعد از انتخاب تاریخ فراخوانی کنند

----------


## mohammad2407

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

مثلا کاربر تصمیم داره تاریخ رو عوض کنه میخوام تاریخی که ذخیره شده رو نمایش بده 

ممنون

----------


## plus

> سلام وقت بخیر چطور میتونم تاریخی که به صورت متن در دیتا بیس ذخیره شده رو بایند کنیم به این تقویم 
> 
> مثلا کاربر تصمیم داره تاریخ رو عوض کنه میخوام تاریخی که ذخیره شده رو نمایش بده 
> 
> ممنون


سلام. اگه تاریخ مورد نظر شمسی هست، اول مشخصه UserPersianFormat رو True قرار بدین. حالا میتونید فیلد مورد نظر رو به مشخصه Text کنترل Bind کنید.
اگه فرمتی که برای نگه داری تاریخ استفاده میکنید غیر از فرمت پیشفرض (برای شمسی yyyy/MM/dd مثلا 1390/04/01) هست، مشخصه CustomFormat رو برابر با فرمت مورد نظر قرار بدین.

----------


## negar.rafie

آقای plus نسخه نهایی کی آماده میشه؟

----------


## NasimBamdad

یکم روی Interface و گرافیکش کار بشه خوشگل تر بشه خوبه

----------


## plus

> آقای plus نسخه نهایی کی آماده میشه؟


نسخه 1.0 نهایی الان ارسال شده.




> یکم روی Interface و گرافیکش کار بشه خوشگل تر بشه خوبه


اگه شما اون چیزی که مد نظرتون هست رو به صورت یک تصویر بگذارین ممنون میشم.
در اصول طراحی "خشگل"ی به اون معنا معمولا حرف آخر رو میزنه. طرحی که میبینید استاندارد ویندوز هست (تقویم خود ویندوز رو ببینید.) طرح مورد نظر باید حتی روی Theme ها HighContrast به خوبی نمایش داده بشه.البته اگه منظورتون Visual Styles ویندوز هست بله... میشه Vistual Styles رو بهش اضافه کرد ولی بازم تو الویت آخره.
datetimeselector_highcontrast.png
باور کنید برای کاربر مهم نیست چقدر برنامه قشنگه..برای مهمه که چقدر راحت باهاش کار میکنه، فوکوس هی اینطرف اونطرف نمیپره، برای هر چیزی روی کیبرد Shortcut هست و ...

----------


## NasimBamdad

فکر کنم 2 تا مشکل دیدم در این کنترل زیبا (اگه اشتباه می کنم عذر خواهی من رو بپذیرید )

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

----------


## plus

> فکر کنم 2 تا مشکل دیدم در این کنترل زیبا (اگه اشتباه می کنم عذر خواهی من رو بپذیرید )
> 
> یکی اینکه با کلیک کردن روی روز انتخابی کنترل بسته نمیشد و باید کلیک می کردیم روی صفحه که پنجره مربوط به انتخاب روز بسته بشه
> دوم اینکه تاریخش بروز نبود ، مثلا 1 بهمن که جمعه بود ،،، میشد چهارشنبه توی کنترل


دوست عزیز اگه منظوتون سال 93 هست تقویم رو چک کنید روز اول بهمن چهارشنبه بود و روز اول اسفند جمعه (کنترل هم توی تصویر پست قبل همین مقادیر رو نشون میده). در مورد focus هم فکر میکنم یک کنترل دیگه رو بررسی کردین من همه جور حالتی رو تست کردم. اگه یک بررسی میکردین و مطمئین میشدین همین کنترل رو تست کردین خیلی خوب بود.
اول حسابی من رو به شک انداختین که بعد از اینهمه تست ایرادی پیدا شده...

----------


## sajaaaaad

با سلام.
.
من نمیتونم ازین کامپونتت استفاده کنم چرا.؟ موقعه که به رفرنسام اضافه میکنمش و توی ToolBox میارمش و به فرمم اضافه میکنم از رفرنسش خطا میگیره.؟؟؟ چرا
002.jpg
ی کامپونتت دیگه رو هم داشتم همین مشکل رو گرفت ازم، رفرنسش با اینکه عدد شده ولی شناسایی نمیشه.! وقتی میزنم using اصلا نمیاد. مشکل کجاس.؟

----------


## plus

شما یک شئ ازین کنترل روی فرم دارین چطور خطا میگیره؟! اگه امکانش هست پروژه تست رو آپلود کنید.

----------


## NasimBamdad

633918811341170000_datetimepicker.png

https://www.syncfusion.com/content/e...TimePicker.png

----------


## NasimBamdad

DateTimePicker.pngimages.jpgtest_CiviCrmDateTimePickerThumb.gif

----------


## NasimBamdad

چندتا نمونه طراحی . اگه این طوری طراحی کنید خیلی خوشگل تر میشه

----------


## sajaaaaad

> شما یک شئ ازین کنترل روی فرم دارین چطور خطا میگیره؟! اگه امکانش هست پروژه تست رو آپلود کنید.


.
داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.!  :ناراحت: 
http://s4.picofile.com/file/8175607568/Test.rar.html
لینک دانلود رو گذاشتم

----------


## plus

> چندتا نمونه طراحی . اگه این طوری طراحی کنید خیلی خوشگل تر میشه


طرح های خوبی هستن، ولی به جز بحث امکان انتخاب زمان که در Popup دارن، چیز ویژه ای ندارن با کمی کار میشه تقویم جاری رو به این شکل ها در آورد. چیزی که مهمه یکپارچگی همه کنترلهاست. من اگه تقویم رو فقط به یکی این اشکلال طراحی میکردم، عمده کاربران که میخوان با کنترلهای ویندوز استفاده کنن، با چیزی مثل این مواجه میشدن:
datetimeselector_classic.png
یعنی Theme اصلی که Theme ویندوز هست و اغلب کاربران باهاش کار میکنن اعمال شده (هرچند امکان تغییر رنگ ها هم وجود داره) و اعمال Theme سفارشی فعلا به عهده استفاده کننده ها گذاشته شده، ایجادش هم کار ساختی نیست الان تفاوت این دو تقویم در رنگ بندی و Round بودن گوشه های روز انتخاب شده هست. رنگ بندی بدون تغییر Source قابل تغییره و Round کردم هم کار تغییر یک متد هست. بنابراین اگه میخواین این شکلی باشه بسم الله...!

----------


## plus

> .
> داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.! 
> http://s4.picofile.com/file/8175607568/Test.rar.html
> لینک دانلود رو گذاشتم


من پروژه شما رو دانلود کردم و با تعیین آدرس فایل dll تونستم استفاده کنم...متوجه نمیشم مشکل شما کجاست...پروژه رو به دات نت دو ببرید ببینید حل نمیشه؟

----------


## NasimBamdad

بحث من سر Theme هست و  زیباییش امکاناتش مورد نیازم نیست . با گرافیک و خوشگل باشه

----------


## sajaaaaad

> من پروژه شما رو دانلود کردم و با تعیین آدرس فایل dll تونستم استفاده کنم...متوجه نمیشم مشکل شما کجاست...پروژه رو به دات نت دو ببرید ببینید حل نمیشه؟


.
با تعیین آدرس فایل dll یعنی چی..؟ من فایل dll رو توی درایو سی کپی کردم و وقتی به رفرنسام اضافه میکنم و Copy local رو True میکنم و وقتی rebuild میکنم اون فایل dll به پوشه bin اضافه نمیشه.! و وقتی هم که کد مینویسم و میخوام از کنترلش استفاده کنم که کلا خطا میده.! اصلا اجازه اجرا شدن نمیده.! :( :(

----------


## plus

آدرس فایل dll توی پروژه ای که آپلود کردین با کامپیوتر من فرق میکرد...اون چیز مهمی نیست. شما با پروژه ای که NET 2 باشه امتحان کردی؟

----------


## NasimBamdad

با اون طراحی ها که معرفی کردم شما نمی تونید به اون شکل در بیارید ؟ خوشگل تر بشه ؟

----------


## plus

> با اون طراحی ها که معرفی کردم شما نمی تونید به اون شکل در بیارید ؟ خوشگل تر بشه ؟


نه حداقل در حال حاضر. صرفا نمیشه به یک حالت خاص به قول شما خوشگل طراحیش کرد و استاندارد بودن کنترل رو زیر سوال برد. پیاده سازی یک سیستم Theme کامل و بدون نقص هم زمان بر هست و جزو الویت ها هم نیست ولی همونطور که گفتم میتونید Source-Code رو دریافت کنید و تغییرات مورد نظر رو بدین. هرچند بدون تغییر Source هم امکان تغییر رنگ ها و فونت وجود داره.

----------


## shahab.es

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

----------


## plus

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


سلام. از پنجره Properties مشخصه UsePersianFormat رو برابر True قرار بدین.

----------


## shahab.es

> سلام. از پنجره Properties مشخصه UsePersianFormat رو برابر True قرار بدین.


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

----------


## mohammad2407

چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم

----------


## plus

> چطوری تاریخ رو بهش میشه پاس داد من میخوام تاریخ رو از یه متغیر و یا .... بگیرم


اگه مقدار شما از نوع DateTime هست، اون رو به مشخصه Value نسبت بدین:

DateTime dateTime = DateTime.Now
dateTimeSelector1.Value = dateTime;

و اگه از نوع رشته هست به مشخصه Text نسبت بدین. البته باید فرمت رشته با فرمت کنترل تطابق داشته باشه و گرنه مقدار برابر با null میشه. اگ مشخصه UsePersianFormat برابر True باشه، فرمت پیشفرض yyyy/MM/dd هست.

string dateTime = "1390/10/14";
dateTimeSelector1.Text = dateTime;

----------


## mohammad2407

مشخصه text نداره !!!

----------


## plus

> مشخصه text نداره !!!


داره ولی در Intellisense نمایش داده نمیشه. شما اگه در Editor بنویسید خطایی نمیده.
علت عدم نمایش هم این هست که این روش توصیه نمیشه. بهتره ابتدا تاریخ مورد نظرتون رو به شی  DateTime تبدیل کنید و بعد از مشخصه Value استفاده کنید.

----------


## pouria_bayat

اگر خاصیت Style رو روی List بزاریم و UsePersianFormat هم true باشه و خاصیت Fromat رو روی Long  بزاریم ماه رو به صورت میلادی و بقیه تاریخ رو درست نشون میده..
32.png

----------


## pouria_bayat

در ضمن اگر یک خاصیت جدید برای اینکه بتونیم قالب برنامه رو به طرحهایی که دوستان پیشنهاد دادن (مثل پست 27 و 28 همین تایپیک) رو هم تغییر بدیم دیگه حرف نداره، البته قالب پیش فرض و هم همینطور برای کنترل های ویندوز داشته باشه در این صورت خیلی خیلی خوب میشه، البته برای کسانی مثل ما که زیاد توانایی دخل و تصرف توی کد رو نداریم میگم.

----------


## plus

> اگر خاصیت Style رو روی List بزاریم و UsePersianFormat هم true باشه و خاصیت Fromat رو روی Long  بزاریم ماه رو به صورت میلادی و بقیه تاریخ رو درست نشون میده..
> 32.png


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




> در ضمن اگر یک خاصیت جدید برای اینکه بتونیم قالب برنامه رو به طرحهایی که دوستان پیشنهاد دادن (مثل پست 27 و 28 همین تایپیک) رو هم تغییر بدیم دیگه حرف نداره، البته قالب پیش فرض و هم همینطور برای کنترل های ویندوز داشته باشه در این صورت خیلی خیلی خوب میشه، البته برای کسانی مثل ما که زیاد توانایی دخل و تصرف توی کد رو نداریم میگم.


بله خوب میشه ولی متاسفانه در حال حاضر اصلا شرایط پیاده سازی چنین طرحی رو ندارم.

----------


## pouria_bayat

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

----------


## plus

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


با سلام و تشکر. مشکل رو حل کردم و ویراست جدید در پست اول ارسال شد.

----------


## vbseyyed

> این رو هم اضافه کنم که میشه با روش‌هایی مثل Reflection این محدودیت  ویندوز که به NET. هم اعمال میشه رو دور زد و کاری کرد که کنترل  DateTimePicker تقویم شمسی نشون بده ولی به دلایلی ترجیح دادم یک کنترل  مجزا ایجاد کنم.


با سلام

اگر بخوام در پروژه خودم سورسش رو وارد کنم به چه صورتي مي تونم با توجه به اين که پروژه من vb.net(.net 2.0) هستش؟ گفته بودين که با روش هايي مثل reflection اين کار رو بکنيد. امکانش هست توضيح بدين چطور؟ و چرا از اين روش استفاده نکرديد؟

با تشکر

----------


## plus

> با سلام
> 
> اگر بخوام در پروژه خودم سورسش رو وارد کنم به چه صورتي مي تونم با توجه به اين که پروژه من vb.net(.net 2.0) هستش؟ گفته بودين که با روش هايي مثل reflection اين کار رو بکنيد. امکانش هست توضيح بدين چطور؟ و چرا از اين روش استفاده نکرديد؟
> 
> با تشکر


دلیلی نداره این کار رو بکنید ولی به هر حال میتونید سورس رو از github دانلود کنید و پروژه (فایل csproject.) رو به solution خودتون اضافه کنید. اون موضوع Reflection که گفتم بحث دیگه ای بود برای استفاده از کنترل خود DateTimePicker بود نه این کنترل.

----------


## shaho.khedri

> .
> داداش اونو که پاکش کردم ولی الان دوباره هم ایجاد کردم بازم همون مشکل رو داره.! جالبه اول که ادد میکنم یه لحظه هست، یعنی وقتی میزنم Atf میاد اما هم چند لحظه که رد میشه انگار نه انگار که همچنین کامپوننتی وجود داره.! 
> http://s4.picofile.com/file/8175607568/Test.rar.html
> لینک دانلود رو گذاشتم


سلام
منم همچین مشکلی داشتم که Target رو برای Dot Net Framework از .Net Framework 4 Client Profile به .NetFramework 4 تغییر دادم و مشکل حل شد.


Plus عزیز خیلی خیلی ممنون از کار مفیدتون.
منم یه سوال کوچولو بپرسم با اجازه
توی یه پروژه به سرچ ترکیبی نیاز دارم و یکی از آیتم های جستجو تاریخه
برای داینامیک بودن UI برنامه میخوام به محض تغییر تاریخ نتیجه نمایش داده بشه و طبیعتاً با صفر کردن تاریخ همه ی رکوردها نمایش داده بشن
راهی هست که توی کنترل چیزی بذارم که کاربر با زدنش تاریخ رو خالی کنه؟

----------


## plus

> سلام
> منم همچین مشکلی داشتم که Target رو برای Dot Net Framework از .Net Framework 4 Client Profile به .NetFramework 4 تغییر دادم و مشکل حل شد.
> 
> 
> Plus عزیز خیلی خیلی ممنون از کار مفیدتون.
> منم یه سوال کوچولو بپرسم با اجازه
> توی یه پروژه به سرچ ترکیبی نیاز دارم و یکی از آیتم های جستجو تاریخه
> برای داینامیک بودن UI برنامه میخوام به محض تغییر تاریخ نتیجه نمایش داده بشه و طبیعتاً با صفر کردن تاریخ همه ی رکوردها نمایش داده بشن
> راهی هست که توی کنترل چیزی بذارم که کاربر با زدنش تاریخ رو خالی کنه؟


خواهش میکنم. اگه منظورتن از چیزی، یک دکمه یا مثل اون هست، میتونید یک UserControl درست کنید و کنترل رو به همران یک دکمه در اون قرار بدین و بجای استفاده مستقیم از کنترل، از UserControl خودتون استفاده کنید.

----------


## aliramazani

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

----------


## imanir

سلام،وقت همگی بخیر

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

----------


## plus

> عالی بود
> ای کاش ادامه بدین


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



> سلام،وقت همگی بخیر
> 
> تقویم رو روی persian قرار دادم ولی موقع خروجی گرفتن تاریخ میلادی رو بر میگردونه.مشکل کجاست ؟ باید مجدد برگردونده بشه به شمسی یا خیر ؟


مشکلی نیست، شمسی بودنش مربوط به UI هست. کنترل خروجی DateTime میده که تاریخ میلادی هست که میتونید به شمسی تبدیلش کنید و یا از مشخصه Text و یا متد GetText استفاده کنید ولی روش اول رو توصیه میکنم.

----------


## shaghaghi

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

----------


## plus

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


با سلام. به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.

----------


## saeidghadiri

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

می خوام تو بعضی فرم ها زمان و تاریخ و باهم نشون بده و ثبت کنه چطوری تنظیم کنم تو Properties و اینکه من با لینک دارم مقدار رو به sql ارسال می کنم اما نمی دونم چطور باید تاریخ و زمان بنویسم


testform.pngsqltestform.png

            try
            {
                using (BehranDBDataContext behDB = new BehranDBDataContext())
                {
                    Tbl_Test Add = new Tbl_Test();
                    
                    Add.Name = txt_Name.Text;
                    Add.ShebaAccount = txt_ShebaAccount.Text;
                    //Add.DateTime = dateTimeSelector1.DateTimeFormat.SetAllDateTimePat  terns();
                    
                    
                    behDB.Tbl_Tests.InsertOnSubmit(Add);
                    behDB.SubmitChanges();

                    MessageBox.Show("اطلاعات با موفقیت ثبت شده است");
                    
                    //خالی کردن اجزا بعد از ثبت
                    txt_Name.Text = "";
                    //dateTimeSelector1 = "";

                    //نمایش در DGV
                    RefreshDataInsert();
                }

            }
            catch (SqlException ex)
            {
                MessageBox.Show("خطای اتصال به بانک اطلاعاتی" + ex);
            }

----------


## plus

> سلام ممنون بابت کاری که انجام داده اید.
> لطفا راهنمایی کتید.
> 
> می خوام تو بعضی فرم ها زمان و تاریخ و باهم نشون بده و ثبت کنه چطوری تنظیم کنم تو Properties و اینکه من با لینک دارم مقدار رو به sql ارسال می کنم اما نمی دونم چطور باید تاریخ و زمان بنویسم


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

Add.DateTime = dateTimeSelector1.Value;


اینطوری هم تاریخ و هم زمان در فیلد مورد نظر ذخیره میشه.

----------


## saeidghadiri

> سلام. همونطور که در پست های قبلی اشاره شده، باید از مشخصه Value استفاده کنید.
> 
> Add.DateTime = dateTimeSelector1.Value;
> 
> 
> اینطوری هم تاریخ و هم زمان در فیلد مورد نظر ذخیره میشه.


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

----------


## plus

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


مشخصه ی Format رو روی Custom بگذارین و مشخصه CustomFormat رو به صورت دلخواه تعیین کنید. مثلا:

dateTimeSelector1.Format = DateTimeSelectorFormat.Custom;
dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm";

 که در اینجا yyyy سال رو به صورت چهار رقمی نمایش میده و در کناریش MM ماه رو به صورت عددی و الی آخر. در واقع با مشخصه CustomFormat شما به صورت دلخواه میتونید ترتیب قرار گرفتن و نحوه نمایش مولفه های تاریخ رو به صورت دلخواه مشخص کنید. در مثال بالا کنترل yyyy رو با سال چهار رقمی جایگزین میکنه و MM رو با ماه دو رقمی و ...
لیست Format specifier هایی که کنترل پشتیبانی میکنه به صورت زیر هست:

s		ثانیه از 0 تا 59
ss		ثانیه از 01 تا 59
m		دقیقه از 0 تا 59
mm		دقیقه از 00 تا 59
h		ساعت از 1 تا 12
hh		ساعت از 01 تا 12
H		ساعت از 0 تا 24
HH		ساعت از 00 تا 24
t		نمایش دهنده ق.ظ/ب.ظ به صورت یک کاراکتری
tt		نمایش دهنده ق.ظ/ب.ظ
d		روز از 1 تا 31
dd		روز از 01 تا 31
ddd		روز هفته به صورت خلاصه شده
dddd		روز هفته
M		ماه از 1 تا 12
MM		ماه از 01 تا 12
MMM		نام ماه به صورت خلاصه
MMMM		نام ماه
y		سال از 0 تا 99
yy		سال از 00 تا 99
yyy		سال با حداقل سه رقم
yyyy		سال به صورت چهار رقمی
/               جدا کننده تاریخ بر اساس تنظیمات سیستم (مقدار جایگزین معمولا خود / و یا - هست)

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

توضیحات بیشتر در مورد Format specifier ها اینجا هست: https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx
اگه ابهامی بود در خدمتم.

----------


## shaghaghi

> با سلام. به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.


ممنون می شوم اگر لطف کنید راهنمایی بفرمایید.

----------


## plus

> ممنون می شوم اگر لطف کنید راهنمایی بفرمایید.


عملیات رسم هر روز در تقویم در متد DrawDay در کلاس CalendarControl در فایل CalendarControl.cs انجام میشه:

private void DrawDay(Graphics graphics, DateTime dayDate, DayPosition dayPosition) {
         bool isCurrentDay = dayDate.Date.Equals(value.Date);
         bool isCurrentMonthDay = this.IsCurrentMonthsDate(dayDate);
         bool isToday = dayDate.Date.Equals(DateTime.Now.Date);
         string dayText = this.Calendar.GetDayOfMonth(dayDate).ToString();
         bool isFocused = focusedDayPosition.Equals(dayPosition);
         Rectangle bounds = this.GetDayBounds(dayPosition);
         Rectangle textBounds = new Rectangle(bounds.Left + dayTextPadding.Left,
                                                 bounds.Top + dayTextPadding.Top,
                                                 bounds.Width - dayTextPadding.Horizontal,
                                                 bounds.Height - dayTextPadding.Vertical);

         TextFormatFlags format = TextFormatFlags.Right | TextFormatFlags.VerticalCenter;
         if (this.RightToLeft == RightToLeft.Yes) {
            format |= TextFormatFlags.RightToLeft;
         }
         Color foreColor;
         Color backColor;
         if (isCurrentDay) {
            foreColor = this.titleForeColor;
            backColor = this.titleBackColor;
         }
         else if (!isCurrentMonthDay) {
            foreColor = this.trailingForeColor;
            backColor = this.BackColor;
         }
         else {
            foreColor = this.ForeColor;
            backColor = this.BackColor;
         }
         using (var brush = new SolidBrush(backColor)) {
            Rectangle rect = bounds;
            rect.Inflate(-1, -1);
            graphics.FillRectangle(brush, rect);
         }
	 ...

همونطور که میبینید بر اساس اینکه روز چه وضعیتی داشته باشه (انتخاب شده باشه یا نه، Focus داشته باشه یا نه و ...) شروطی بررسی شده و در نهایت با متد FillRectangle پس زمینه رسم شده. شما باید به طریقی در این متد، بررسی کنید که روز مورد نظر (dayDate) روز تعطیل هست یا نه. اگه هست رنگ مورد نظر خودتون رو به backColor نسبت بدین.
برای این کار یک راه این هست که یک Property به کنترل و همینطور به کلاس CalendarControl اضافه کنید که شامل آرایه ای از روزهای تعطیل میشه. با داشته این آرایه در این کلاس میتونید بررسی رو انجام بدین. برای اضافه کردن یک Property میتونید الگویی که برای سایر Property ها در نظر گرفته شده رو دنبال کنید. (برای مثال، ForeColor رو در کلاسهای DateTimeSelector و CalendarControl بررسی کنید.
راه دیگه میتونه تعریف یک EventHandler باشه که در اون استفاده کننده تعیین کنه که آیا روز مربوطه تعطیل هست یا نه...

----------


## saeidghadiri

> مشخصه ی Format رو روی Custom بگذارین و مشخصه CustomFormat رو به صورت دلخواه تعیین کنید. مثلا:
> 
> dateTimeSelector1.Format = DateTimeSelectorFormat.Custom;
> dateTimeSelector1.CustomFormat = "yyyy/MM/dd hh:mm";
> 
>  که در اینجا yyyy سال رو به صورت چهار رقمی نمایش میده و در کناریش MM ماه رو به صورت عددی و الی آخر. در واقع با مشخصه CustomFormat شما به صورت دلخواه میتونید ترتیب قرار گرفتن و نحوه نمایش مولفه های تاریخ رو به صورت دلخواه مشخص کنید. در مثال بالا کنترل yyyy رو با سال چهار رقمی جایگزین میکنه و MM رو با ماه دو رقمی و ...
> لیست Format specifier هایی که کنترل پشتیبانی میکنه به صورت زیر هست:
> 
> s        ثانیه از 0 تا 59
> ...


سلام ممنون از راهنماییت.
حالا فهمیدم اما از اگه با این روش ساعت همراه با تاریخ در یک فیلد ذخیره کنیم زمان جستجو به مشکل بر میخوریم حالا ازت راهنمایی می خوام می خوام زمان جدا و تاریخ جدا باشه چکار کنم 2 باز dateTimeSelector رو در فرم اضافه کنم؟ و یکی برای زمان و یکی برای تاریخ باشه؟

و اینکه زمان رو به صورت Linq جطور ذخیره کنم ؟
یه مورد دیکه در پست 11 به Ghasem گفتی برای تاریخ به صورت شمسی در sql ذخیره شه از به کلاس استفاده کنه من راجب اون کلاس جستجو کردم ولی کارهایی که بقیه گفته بودن جواب نداد و ذخیره باز به صورت میلادی در SQL انجام میشه.

----------


## plus

> سلام ممنون از راهنماییت.
> حالا فهمیدم اما از اگه با این روش ساعت همراه با تاریخ در یک فیلد ذخیره کنیم زمان جستجو به مشکل بر میخوریم حالا ازت راهنمایی می خوام می خوام زمان جدا و تاریخ جدا باشه چکار کنم 2 باز dateTimeSelector رو در فرم اضافه کنم؟ و یکی برای زمان و یکی برای تاریخ باشه؟
> 
> و اینکه زمان رو به صورت Linq جطور ذخیره کنم ؟
> یه مورد دیکه در پست 11 به Ghasem گفتی برای تاریخ به صورت شمسی در sql ذخیره شه از به کلاس استفاده کنه من راجب اون کلاس جستجو کردم ولی کارهایی که بقیه گفته بودن جواب نداد و ذخیره باز به صورت میلادی در SQL انجام میشه.


سلام. شما میتونی اگه بخوای از دو کنترل استفاده کنی ولی این کار هیچ مزیتی ایجاد نمیکنه. در حالتی که فقط از یک کنترل استفاده کنی هم میتونی تاریخ و زمان رو به صورت جدا داشته باشی و اگه بخوای به صورت جدا ذخیره کنی. خروجی کنترل یک متغیر از نوع DateTime هست که مشخصه Date اون تاریخ و مشخصه TimeOfDay اون زمان رو نگه میداره. در مورد اینکه در جستجو به مشکل میخوره هم، نمیدونم چرا اینطور فکر میکنی، هرچند این موضوع از خارج از بحث این تاپیک هست.

در مورد ذخیره زمان در Linq هم موضوع خارج از بحث تاپیک هست من هم با Linq زیاد کار نکردم، برای ذخیره تاریخ به صورت شمسی هم شما باید خروجی این کنترل رو با کلاس PersianCalendar به صورت رشته تبدیل کنی (تعداد زیادی تاپیک در این مورد هست) و بعد اون رشته رو در یک فیلد "رشته" ای مثل (char(n در SQL ذخیره کنی، نه در یک فیلد ِDateTime یا نوع های شبیه این. البته معمولا توصیه میشه که شما تاریخ رو به صورت میلادی در SQL Server دخیره کنی.

----------


## saeidghadiri

> سلام. شما میتونی اگه بخوای از دو کنترل استفاده کنی ولی این کار هیچ مزیتی ایجاد نمیکنه. در حالتی که فقط از یک کنترل استفاده کنی هم میتونی تاریخ و زمان رو به صورت جدا داشته باشی و اگه بخوای به صورت جدا ذخیره کنی. خروجی کنترل یک متغیر از نوع DateTime هست که مشخصه Date اون تاریخ و مشخصه TimeOfDay اون زمان رو نگه میداره. در مورد اینکه در جستجو به مشکل میخوره هم، نمیدونم چرا اینطور فکر میکنی، هرچند این موضوع از خارج از بحث این تاپیک هست.
> 
> در مورد ذخیره زمان در Linq هم موضوع خارج از بحث تاپیک هست من هم با Linq زیاد کار نکردم، برای ذخیره تاریخ به صورت شمسی هم شما باید خروجی این کنترل رو با کلاس PersianCalendar به صورت رشته تبدیل کنی (تعداد زیادی تاپیک در این مورد هست) و بعد اون رشته رو در یک فیلد "رشته" ای مثل (char(n در SQL ذخیره کنی، نه در یک فیلد ِDateTime یا نوع های شبیه این. البته معمولا توصیه میشه که شما تاریخ رو به صورت میلادی در SQL Server دخیره کنی.


سلام
پس میشه به میلادی ذخیره کرد و توی دیتا گرید شمسی نشون داد اون هم با کلاس persiancalender انجام میشه درسته؟

----------


## plus

> سلام
> پس میشه به میلادی ذخیره کرد و توی دیتا گرید شمسی نشون داد اون هم با کلاس persiancalender انجام میشه درسته؟


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

----------


## shaghaghi

> عملیات رسم هر روز در تقویم در متد DrawDay در کلاس CalendarControl در فایل CalendarControl.cs انجام میشه:
> ...راه دیگه میتونه تعریف یک EventHandler باشه که در اون استفاده کننده تعیین کنه که آیا روز مربوطه تعطیل هست یا نه...


ضمن تشکر، لطفا برای dateTimeSelector هم راهنمایی بفرمایید چون چنین متدی در آن ندیدم. 
ضمنا کامپوننت calendarControl فاقد مشخصه UsePersianFormat است می خواستم ببینم چه جوری تقویم فارسی رو میشه تنظیم کرد؟
ممنون

----------


## plus

> ضمن تشکر، لطفا برای dateTimeSelector هم راهنمایی بفرمایید چون چنین متدی در آن ندیدم. 
> ضمنا کامپوننت calendarControl فاقد مشخصه UsePersianFormat است می خواستم ببینم چه جوری تقویم فارسی رو میشه تنظیم کرد؟
> ممنون


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

calendarControl.DateTimeFormat = Atf.UI.PersianDateTimeFormat.GetPersianDateTimeFor  mat();

----------


## vB.N3T

این خطا برا چیه760109_9iNpIvrg.jpg

----------


## plus

> این خطا برا چیه


ظاهرا Visual Studio امکان دسترسی به فایل مربوط به کامپوننت رو نداره. سعی کنید از فایل رو یک جای دیگه قرار بدین و دوباره به Toolbox اضافش کنید. پروژه رو هم Clean کنید یا سعی کنید روی یک پروژه جدید امتحان کنید.

----------


## shaghaghi

> چه متدی باشد باشه؟ تاپیک رو مطالعه کنید فکر میکنم توضیحات کافی باشه. ..[/CSHARP]


dateTimeSelector  فاقد رخدادی با نام DrawDay و یا نام های مشابه می باشد.

----------


## vB.N3T

چطوری باید رفرنسشو اضافه کنیم 

Error    1    The type or namespace name 'Atf' could not be found (are you missing a using directive or an assembly reference?)    c:\users\ali\documents\visual studio 2010\Projects\WindowsFormsApplication10\WindowsFor  msApplication10\Form1.Designer.cs    56    17    WindowsFormsApplication10

----------


## plus

> dateTimeSelector  فاقد رخدادی با نام DrawDay و یا نام های مشابه می باشد.


شما اگه بخوای از DLL کامپایل شده استفاده کنی بله، همونطور که گفتم:



> به صورت built-in چنین امکانی پیاده سازی نشده ولی اگه شما مایل باشید که source code رو دانلود کنید و این امکان رو برای خودتون اضافه کنید من میتونم راهنمایی کنم که در چه کلاس و متدی رنگ روزهای تقویم تعیین میشه و چطور میتونید این امکان رو اضافه کنید.


و میتونید این متد (و نه Event) رو در سورس کد و البته در کلاس CalendarControl نه DateTimeSelector پیدا کنید، ویرایش کنید و dll سفارشی رو بسازید.

----------


## plus

> چطوری باید رفرنسشو اضافه کنیم 
> 
> Error    1    The type or namespace name 'Atf' could not be found (are you missing a using directive or an assembly reference?)    c:\users\ali\documents\visual studio 2010\Projects\WindowsFormsApplication10\WindowsFor  msApplication10\Form1.Designer.cs    56    17    WindowsFormsApplication10


از بخش References  مربوط به Project میتونید فایل DLL رو اضافه کنید و یا اینکه روی ToolBox راست کلیک کنید و Choose Items... رو بزنید و DLL رو اضافه کنید.

----------


## mohammadmowlavi

سلام ضمن تشکر از زحمت شما فرض کنید کاربر بخواد تاریخ تولد رو وارد کنه چون تقویم شما قابلیت انتخاب سال رو نداره و همچنین ماه رو خیلی اذیت میشه و ترجیح میده دستی وارد کنه!

----------


## plus

> سلام ضمن تشکر از زحمت شما فرض کنید کاربر بخواد تاریخ تولد رو وارد کنه چون تقویم شما قابلیت انتخاب سال رو نداره و همچنین ماه رو خیلی اذیت میشه و ترجیح میده دستی وارد کنه!


بله این مشکل رو در صفحه اول پست هم بهش اشاره کردم، البته کاربر میتونه با استفاده از Scroll موس و بدون استفاده از کیبرد تاریخ رو وارد کنه که البته ایده آل نیست. هنوز فرصت نکردم این قابلیت رو به تقویم اضافه کنم.

----------


## mohammadmowlavi

ممنون از وقتی که میزارین

----------


## r4hgozar

سلام.
ایا میشه در wpf  از این حالت گرافیکیش استفاده کرده بشه؟؟
من به یک selector گرافیکی به این صورت نیاز دارم که بشه تاریخ رو select کرد

----------


## plus

> سلام.
> ایا میشه در wpf  از این حالت گرافیکیش استفاده کرده بشه؟؟
> من به یک selector گرافیکی به این صورت نیاز دارم که بشه تاریخ رو select کرد


سلام.
منظورتون چه حالت گرافیکیی هست؟
کنترل های WinForms رو در Wpf میشه استفاده کرد منتها امتحان نکردم بخصوص اینکه این Popup داره. میتونید امتحان کنید.
https://msdn.microsoft.com/library/m...v=vs.100).aspx

----------


## r4hgozar

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

----------


## plus

> سلام.وقتی ادد می کنم dll رو هیچی چیزی برای من در toolbox نمیاره و این مشکل منه.


برای Windows Forms میتونید به پست 76 مراجعه کنید ولی برای Wpf به صورت مستقیم نمیتونید اضافه کنید چون این یک کنترل Windows Forms هست. لینکی که دارم رو مطالعه کنید.

----------


## r4hgozar

بله . ممنون.
مجبور شدم از combobox استفاده کنم./
از توجهتون ممنون

----------


## vB.N3T

مهندس سوالی داشتم

اگر تاریخ رو به صورت شمسی در دیتا بیس ذخیره کرده باشیم
و برای ویرایش اطلاعات یه سلکت انجام بدیم و اطلاعات داخل دیتاگرید نمایش داده بشه
با کلیک بر روی سطر های دیتا گرید اطلاعات به تکس باکس منتقل مبشه
میخاستم ببینم چطور تاریخ ثبت شده هم به این کامپوننت ست بشه با کلیک بر روی سطر دیتاگرید

به عنوان مثال این عکس 
sshot-1.png

----------


## plus

> مهندس سوالی داشتم
> 
> اگر تاریخ رو به صورت شمسی در دیتا بیس ذخیره کرده باشیم
> و برای ویرایش اطلاعات یه سلکت انجام بدیم و اطلاعات داخل دیتاگرید نمایش داده بشه
> با کلیک بر روی سطر های دیتا گرید اطلاعات به تکس باکس منتقل مبشه
> میخاستم ببینم چطور تاریخ ثبت شده هم به این کامپوننت ست بشه با کلیک بر روی سطر دیتاگرید
> 
> به عنوان مثال این عکس 
> sshot-1.png


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

----------


## vB.N3T

مهندس من فیلد مربوط به تاریخ رو از نوع nvarchar انتخاب کردم و تاریخ به صورت شمسی ذخیره کردم به این صورت 

nw.date = dateTimeSelector2.GetText("yyyy/MM/dd");

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

dateTimeSelector1.Value = dataGridView3.CurrentRow.Cells["date"].Value;

----------


## plus

> مهندس من فیلد مربوط به تاریخ رو از نوع nvarchar انتخاب کردم و تاریخ به صورت شمسی ذخیره کردم به این صورت 
> 
> nw.date = dateTimeSelector2.GetText("yyyy/MM/dd");
> 
> الان این کد مینویسم خطا میده برایی ست کردن تاریخ بهش 
> 
> dateTimeSelector1.Value = dataGridView3.CurrentRow.Cells["date"].Value;


هموطور که گفتم از مشخصه Text استفاده کنید:

dateTimeSelector1.Text = dataGridView3.CurrentRow.Cells["date"].Value;

----------


## m. hamide7

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

----------


## plus

> ممنون از کنترلتون استفاده کردم و خیلی خوب بود 
> فقط چطور میتونم وقتی که برنامه اجرا میشه روش تاریخ پیش فرض روز به شمسی باشه ؟


خواهش میکنیم. برای فارسی بودن تاریخ مشخصه UserPersianFormat  رو برابر True قرار بدین. برای نمایش تاریخ روز، میتونید در Form_Load تاریخ روز رو به مشخصه Value انتساب بدین:


dateTimeSelector1.Value = DateTime.Now;

----------


## vB.N3T

مهندس ایا امکان اینو داره تاریخ رو به این صورت نماش بده
یکشنبه 11 بهمن 1394 
؟؟؟

----------


## plus

> مهندس ایا امکان اینو داره تاریخ رو به این صورت نماش بده
> یکشنبه 11 بهمن 1394 
> ؟؟؟


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


         dateTimeSelector1.Format = Atf.UI.DateTimeSelectorFormat.Custom;
         dateTimeSelector1.CustomFormat = "dddd، dd MMMM yyyy";
         dateTimeSelector1.RightToLeft = RightToLeft.Yes;
         dateTimeSelector1.UsePersianFormat = true;


البته از طریق  Designer  هم میتونید این تغییرات رو ایجاد کنید.

DateTimeSelector-CustomFormat.png

----------


## vB.N3T

مهندس خیلی ممنون 

یه سوال دیگه از خدمتتون دارم 

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

قبل از این که به این صورتی تاریخ به شکل .شنبه 11 ابان 1394 
در دیتابیس ذخیره کنم

از این کد برای ست کردن تاریخ استفاده میکردم و جواب میداد 
dateTimeSelector1.Text = combo_Date.Text;
الان ست نمیشه 
ممنون

----------


## plus

> مهندس خیلی ممنون 
> 
> یه سوال دیگه از خدمتتون دارم 
> 
> زمانی که اطلاعات رو به این صورت در دیتا بیس ذخیره میکنیم 
> و بعد از اون اطلاعات تاریخ رو در کمبو باکس لود کنیم
> و بخواهیم با نغیر اینکس کمبو باکس تاریخ به کامپوننت ست بشه باید از چه خصوصیتی استفاده کرده 
> 
> قبل از این که به این صورتی تاریخ به شکل .شنبه 11 ابان 1394 
> ...


بهتره شما تاریخ رو به صورت متغیر DateTime و فیلد نوع DATE در در دیتابیس ذخیره کنید و موقعی که بازیابی میکنید اون مقدار DateTime (و نه رشته) رو به مشخصه Value انتساب بدین:


dateTimeSelector1.Value = combo_Date.SelectedValue;

----------


## vB.N3T

نوع فیلد دیتا بیس رو به date تغیر دادم 
و این خطا رو دارم .مشکلش چیه

----------


## plus

مشخصه SelectedValue از نوع object هست قبل از مقایسه با تاریخ به نوع DateTime تبدیل کنید.

DateTime? selectedValue = (DateTime?)combo_Date.SelectedValue;


البته قبل از اون مطمئن بشید که مشخصه ValueMember مربوط به ComboBox رو درست مقدار دهی کردین. برای اطلاعات بیشتر در این مورد جستجو کنید.

----------


## mahaya67

من یه کم توضیح میخوام :ناراحت:  
من مبتدی هستم.. همه این پست هارو خوندم ولی نمیدونم دقیقا باید چکار کنم من فایل dll رو به پروژه اضافه کردم حالا این date time selector را از کجا باید بیارم! تو کنترل ها نبود. حالا بعدش باید چکار کنم؟؟؟ من فقط میخوام کاربر تاریخ تولدشو وارد کنه و توی دیتا بیس هم فیلد date تعریفش کردم. یه روش آسون برای این کار بهم میگین؟؟؟  :ناراحت:

----------


## ژیار رحیمی

> نوع فیلد دیتا بیس رو به date تغیر دادم 
> و این خطا رو دارم .مشکلش چیه


سلام s.date یه ابجکت هست که ترکیبی ار تاریخ و زمان هست شما بصورت s.date.Date مقایسه رو انجام بدین

----------


## sh

دوست عزیز (Plus) سلام.

وقتی از این DateTimePicker در ویندوز 10 با تاریخ تنظیم شده به فرمت شمسی استفاده میشه کد زیر برای ذخیره در دیتا بیس مقدار فارسی را برمیگرداند
MessageBox.Show(dateTimeSelector1.Value.ToString()  );
البته DateTimePicker استاندارد موجود در ویژوال استدیو نیز همین رفتار را نشان می دهد که با قطعه کد ذیل در روال Form_Load قابل حل می باشد.

System.Threading.
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
لیکن ظاهر کامپوننت طراحی شده توسط شما بصورت تاریخ میلادی تغییر می کند که جای اصلاح دارد

----------


## plus

> دوست عزیز (Plus) سلام.
> 
> وقتی از این DateTimePicker در ویندوز 10 با تاریخ تنظیم شده به فرمت شمسی استفاده میشه کد زیر برای ذخیره در دیتا بیس مقدار فارسی را برمیگرداند
> 
> MessageBox.Show(dateTimeSelector1.Value.ToString()  );
> 
> 
> البته DateTimePicker استاندارد موجود در ویژوال استدیو نیز همین رفتار را نشان می دهد که با قطعه کد ذیل در روال Form_Load قابل حل می باشد.
> 
> ...


با سلام،

متد ToString مشخصه Value که از نوع DateTime هست مربوط به .NET Framework هست و ربطی به این کنترل نداره. شما اگر تاریخ رو با فرمت میلادی میخواید بجای تغيير Culture ترد جاري كه همه چیز رو تغییر میده کافیه به صورت زیر InvariantCulture رو به متد ToString ارسال کنید:

DateTime? value = dateTimeSelector1.Value;
if (value.HasValue) {
MessageBox.Show(value.Value.ToString(CultureInfo.I  nvariantCulture));
}

----------


## A3ed.BlackHat

سلام
اول بابت کامپوینتت خوبتون تشکر میکنم
یه سوال داشتم میخوام با این کامپیونت داده های بین دو تاریخ رو بدست بیارم و توی datagridview نمایش بدم
نوع تاریخ توی دیتابیس به صورت data هست
از کد زیر استفاده میکنم ولی ارور زیر رو  میده
The parameterized query '(@dateTimeSelectorBetween1 nvarchar(4000),@dateTimeSelectorBetwe' expects the parameter '@dateTimeSelectorBetween1', which was not supplied.


            SqlDataAdapter da = new SqlDataAdapter(@"
            Select * from Tlb_Conversation where data Between '@dateTimeSelectorBetween1' and '@dateTimeSelectorBetween2'
             ", sqlConnection);
             da.SelectCommand.CommandType = CommandType.Text;
             da.SelectCommand.Parameters.AddWithValue("@dateTim  eSelectorBetween1", dateTimeSelectorBetween1.Value);
             da.SelectCommand.Parameters.AddWithValue("@dateTim  eSelectorBetween2",  dateTimeSelectorBetween2.Value);

              DataSet ds = new DataSet();

              da.Fill(ds);
              DegConversation.DataSource = ds.Tables[0].DefaultView;

----------


## plus

> سلام
> اول بابت کامپوینتت خوبتون تشکر میکنم
> یه سوال داشتم میخوام با این کامپیونت داده های بین دو تاریخ رو بدست بیارم و توی datagridview نمایش بدم
> نوع تاریخ توی دیتابیس به صورت data هست
> از کد زیر استفاده میکنم ولی ارور زیر رو  میده
> The parameterized query '(@dateTimeSelectorBetween1 nvarchar(4000),@dateTimeSelectorBetwe' expects the parameter '@dateTimeSelectorBetween1', which was not supplied.
> 
> 
>             SqlDataAdapter da = new SqlDataAdapter(@"
> ...


با سلام. شما هر مقدار تاریخ دیگه ای که جای مقادیر گرفته شده از کنترل بگذارین (برای مثال، DateTime.Now) هم همین خطا رو دریافت میکنید، موضوع ربطی به کنترل نداره. دقیقا برای من مشخص نیست مشکل چیه، شاید نیاز به single quote (') اطراف پارامتر نیست و یا نوع داده ستون data تاریخ نیست. اگه خطا رو در یک تاپیک مجزا مطرح کنید دوستان میتونن بهتر کمک کنن.

----------


## A3ed.BlackHat

> با سلام. شما هر مقدار تاریخ دیگه ای که جای مقادیر گرفته شده از کنترل بگذارین (برای مثال، DateTime.Now) هم همین خطا رو دریافت میکنید، موضوع ربطی به کنترل نداره. دقیقا برای من مشخص نیست مشکل چیه، شاید نیاز به single quote (') اطراف پارامتر نیست و یا نوع داده ستون data تاریخ نیست. اگه خطا رو در یک تاپیک مجزا مطرح کنید دوستان میتونن بهتر کمک کنن.


سلام
بله مشکل از ' بود برداشتم درست کار کرد
تشکر

----------


## vB.N3T

مهندس جان من میخام تاریخ این کامپوننتت رو دستی به این تاریخ تغیر بدم  dateTimeSelector4.Text = "1395/00/00";
ولی قبول نمیکنه یعنی هیچ اتفاقی نمیافته.باید چیکار کرد بشه این تاریخ رو بهش ست کرد
یه سوال دیگم دارم در برنامم در فرم اصلیم این کامپونتت رو دارم..بخوام در فرم های دیگه به سال این کامپونتت دسترسی داشته باشم باید چیکار کرد
ممنون

----------


## plus

> مهندس جان من میخام تاریخ این کامپوننتت رو دستی به این تاریخ تغیر بدم  dateTimeSelector4.Text = "1395/00/00";
> ولی قبول نمیکنه یعنی هیچ اتفاقی نمیافته.باید چیکار کرد بشه این تاریخ رو بهش ست کرد
> یه سوال دیگم دارم در برنامم در فرم اصلیم این کامپونتت رو دارم..بخوام در فرم های دیگه به سال این کامپونتت دسترسی داشته باشم باید چیکار کرد
> ممنون


سلام،

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

----------


## aliramazani

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

----------


## Imenam

سلام 
یه مشکلی تو ویندوز 10 برام به وجود اومده!

تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
date1.JPG

----------


## aliramazani

> سلام 
> یه مشکلی تو ویندوز 10 برام به وجود اومده!
> 
> تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
> تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
> date1.JPG


موقع ذخیره توی دیتابیس با این فرمت اطلاعات را بگیرید:

dateTimepicker1.GetText("yyyy/DD/mm");

----------


## plus

> سلام 
> یه مشکلی تو ویندوز 10 برام به وجود اومده!
> 
> تو ویندوز 10 وقتی تنظیمات روی تاریخ شمسی باشه تاریخ تو این کامپوننت برعکس نشون داده میشه و تمامی اطلاعاتی که ثبت شده هم تو بانک با این فرمت ثبت شده که دردسر بزرگی ایجاد کرده و هنگام جستجو این تاریخ ها را اصلا در نظر نمیگیره
> تو شکل زیر اون تاریخی که با رنگ زرد نشون دادم دقیقا چیزی هست که تو ویندوز 10 با تنظیمات تقویم شمسی اتفاق میفته...به نظرتون باید چی کار کنم تا تاریخ تو این کامپوننت درست نشون داده بشه؟ و اطلاعاتی که تو بانک ذخیره شده را چطور اصلاح کنم؟
> date1.JPG



توصیه میشه که تاریخ رو به صورت رشته ذخیره نکنید تا با این مشکلات مواجه نشید. اگر میخواین رشته استفاده کنید هم طبق روشی که دوستمون اشاره کردن استفاده کنید تا فرمت ثابت باشه.

----------


## mohammadmowlavi

سلام اگر میشد این ارتفاع این کنترل رو هم تغییر داد خیلی خوب میشد!

----------


## plus

> سلام اگر میشد این ارتفاع این کنترل رو هم تغییر داد خیلی خوب میشد!


با سلام،

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

----------


## vB.N3T

مهندس ورژن تحت وب ASP نمیدید؟؟؟

----------


## mandagarana

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

----------


## plus

> مهندس ورژن تحت وب ASP نمیدید؟؟؟


متاسفانه چنین برنامه ای ندارم.




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


همه نسخه ها در Github که لینکش در پست اول هست قابل دریافت هست. در مورد مقایسه تاریخ...به نظرم ربطی به یک کنترل نمایش و دریافت تاریخ و یا جدول دیتابیس نداره.

----------


## mohammadmowlavi

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

----------


## plus

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


سلام،

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

----------


## mohammadmowlavi

اینم خدمت شماUntitled.png

----------


## plus

> اینم خدمت شماUntitled.png


ممنون از شما. 

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

----------


## mohammadmowlavi

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

----------


## plus

> خب اینو واسه نمونه گذاشتم شما استاد مایید بهتر میدونید بعضی از فونتای فارسی اندازه هاشون استاندارد نیست و ممکن به خوبی داخل جعبه متن نمایش داده نشه و ما مجبور به استفاده از عرض های سفارشی میشیم
> با تشکر


نیازتون راجع به عدم استاندارد بودن بعضی از فونت های فارسی قابل درکه ولی به دلیل خاص بودن یک چنین نیازی، پیاده نشده. پروژه open-source هست و اگه علاقه و حوصله داشته باشید میتونید خودتون پیاده کنید.

----------


## mohammadmowlavi

به هرحال تشکر بسیار از وقتی که میگذارین

----------


## sldvhlds

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

----------


## bmvgod

> همونطور که میدونید، برای حل مشکل انتخاب و نمایش تاریخ با تقویم فارسی، کنترل‌‌های مختلفی توسط توسعه دهنده‌های ایرانی برای WinForms ساخته شده. من خیلی از اون‌‌ها رو بررسی کردم ولی اغلب مشکلات زیادی دارن و حتی اون‌های هم که open-source هستن نیاز به کار زیادی برای بهبود دارن. بعضی مشکلاتی که من تا به حال دیدم این‌ها هستند:
> - اختصاصی برای تقویم شمسی؛ این کنترل‌ها مختص تقویم شمسی ایجاد شدن و قابلیت کار با تقویم غیر از شمسی رو ندارن. بنابراین اگه لازم بشه در نرم افزاری تقویم شمسی در کنار تقویم میلادی مورد استفاده قرار بگیره کاربردی ندارن.
> - فرمت ثابت؛ این کنترل‌ها اغلب برای فقط دریافت تاریخ، اون هم در فرمت ثابتی مثل yyyy/MM/dd طراحی شدن بنابراین نه تنها امکان دریافت زمان در کنار (و یا بدون) تاریخ فراهم نیست، بلکه فقط قادر هستن تاریخ رو با فرمت ثابت دریافت کنن. برای مثال اگه شما بخواهید کاربر مؤلفه سال رو به صورت دو رقمی، نه چهار رقمی وارد کنه، این کنترل‌‌ها توانایی مانور در این زمینه رو ندارند.
> - عدم پشتیبانی صحیح از کیبرد و موس به صورت کامل و صحیح؛
> - واسط کاربری غیر استاندارد؛ همه کنترل‌هایی که من تا به حال دیدم از واسط کاربری غیر استاندارد رنج می‌برن. مشکلاتی از قبیل استفاده از فونت ها و رنگ‌های خاص و غیر قابل تغییر، اندازه‌‌های نامناسب و ثابت و… .
> 
> DateTimeSelector
> 
> کنترل DateTimeSelector با هدف پشتیبانی کامل از تقویم شمسی و میلادی (و سایر تقویم‌ها، با احتمالا کمی بهبود) نوشته شده و سعی شده که مشکلاتی که در مورد DateTimePicker‌ و همچنین مشکلات نمونه‌های مشابه ایرانی که بهش اشاره کردم رو نداشته باشه. در واقعه، ویژگی‌های این کنترل، نداشتن مشکلاتی هست که بهش اشاره شد:
> ...


با عرض سلام و خسته نباشید 
من dll رو به برنامه اضافه کردم و وقتی کامپوننت رو روی فرم میندازم خطالی زیر رو بهم میده:
taghvimFarsi.jpg

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

----------


## NasimBamdad

.Net Framework رو  بر روی 4 قرار بدید و مجدد Build کنید

----------


## mahmood744

سلام
کامپونت بسیار خوبی است
واقعا خسته نباشید :تشویق: 

من چهار تا نکته برای بهبود این کامپونت دارم

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

دوم اینکه دو تا فونت می گرفت . یکی برای Textbox  و یکی برای  جدول تقویم
بعضی موقع ها می خواهد TextBox را با فونت بزرگ نمایش بدی اجبارا تقویم هم بزرگ می شود

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

چهارم اینکه این ظاهر هم بد نیست . ماه و سال جدا از هم باشند , بنظرم کاربردی تر باشد و  در سیستم تاچ ماه  و سال راحت تر عوض می شود و خوانا تر است
LatifiDatePicker1.jpg

با تشکر از زحمات شما  :تشویق:  :تشویق:  :تشویق:

----------


## plus

ممنون از پیشنهادات شما. انشالا که شخص خیری پیدا بشه و بهبودهای مورد نیاز رو برای این پروژه بده. متاسفانه فعلا فرصتی برای توسعه این پروژه ندارم!

----------


## mrali.jalali

این تقویم را کسی داره بگذاره ؟

----------


## plus

> این تقویم را کسی داره بگذاره ؟


منظورتون رو متوجه نمیشم. لینک دانلود کنترل در صفحه اول هست...

----------


## ji ming u

چجوری میشه با اینتر فوکوس کرد بجای تب؟

----------


## plus

> چجوری میشه با اینتر فوکوس کرد بجای تب؟


باید سورس کد رو تغییر بدید. در فایل DateTimeSelector.cs خط 1100 متد ProcessDialogKey میتونید عملکرد Tab رو با Enter عوض کنید.

----------


## sikhora

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

----------


## Shadow_net

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


کامپوننت های تاریخ از تاریخ سیستم استفاده میکنند احتمالاً مشکل از تنظیمات سیستمتون هست

----------


## piman_biabani

سلام من چطور میتونم لایسنس ateTimePickr فقعال کنم در پروژم

----------


## plus

> سلام من چطور میتونم لایسنس ateTimePickr فقعال کنم در پروژم


سلام،
سورس کد این کنترل تحت لایسنس MIT منتشر شده و نیازی نیست کار خواصی در رابطه با لایسنس انجام بدین.

----------

